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/

initまた、変数をローカルストレージまたはセッションストレージに永続化する方法として、関数内にAmplify.JS機能を実装します。

乾杯。

于 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 に答える