1

好的,所以我使用下面的框架代码来创建一个 Javascript 库

var Device = (function(window, document, $) {
    function func_1(){
         return 1;
    }

    function func_2(){
        return 2;
    }

    var internalDevice = {
        func_1: func_1,
        func_2: func_2
    };
    return internalDevice; // expose functionality to the rest of the code
})(window, document, jQuery);

本质上,我会这样称呼我的函数:Device.func_1();.

我希望添加一个构造函数,该构造函数将从一开始即初始化一些私有变量,即一旦创建对象,就不必进行任何额外的函数调用。

我该怎么做呢?!

谢谢。

4

3 回答 3

2

可以试试这种方式吗?private_1 和 private_2 只能通过函数调用访问,而您可以使用 Device() 构造函数。

function Device(param1, param2) {
    var private_1= param1;
    var private_2= param2;

    this.func_1= function() {
        return private_1;                
    }

    this.func_2= function() {
        return private_2;            
    }
}

var myDevice = new Device(1, 2);
alert(myob.func_1()); 

或者可能是这样的:

var Device = (function(window, document) {
    var private_1;

    function init(param1) {
      private_1 = param1;
    }

    function func_1(){
         return private_1;
    }

    function func_2(){
        return 2;
    }

    var internalDevice = {
        func_1: func_1,
        func_2: func_2,
        init  : init
    };
    return internalDevice; // expose functionality to the rest of the code
})(window, document);

Device.init(10);
alert(Device.func_1())
于 2012-11-19T01:15:18.930 回答
1

我设法弄清楚了这一点,这就是我的做法:

var Device = (function(window, document, $) {
    var var_1 = 10,
    var_2 = 20,
    var_3;

    function init(){
         var_3 = 30;
    }

    function func_1(){
         return 1;
    }

    function func_2(){
         return 2;
    }

    var internalDevice = {
        init: init(),
        func_1: func_1,
        func_2: func_2
    };
    return internalDevice;
})(window, document, jQuery);

因此,当您调用 时Device.func_2();,变量已经被初始化。你可以在这里看到一个活生生的例子:http: //jsfiddle.net/CZjYH/11/

我还将在函数内部实现 Amplify.JS 功能,init作为将变量保存到本地或会话存储的一种方式。

干杯。

于 2012-11-19T12:38:43.947 回答
0
var Device = (function(window, document, $, undefined)
{
    return $.extend(function()
    {
        // constructor
    },
    {
        prototype:
        {
            func_1: function func_1()
            {
                return 1;
            },
            func_2: function func_1()
            {
                return 2;
            }
        }
    });
})
(window, window.document, jQuery);

或者

var Device = (function(window, document, $, undefined)
{
    var DevicePrivate = function()
    {
        // constructor
    };

    DevicePrivate.prototype =
    {
        func_1: function()
        {
            return 1;
        },
        func_2: function()
        {
            return 2;
        }
    };

    return DevicePrivate;
})
(window, window.document, jQuery);
于 2012-11-19T01:42:29.993 回答