2012-11-19 114 views
1

好了,所以我用下面的框架代碼創建一個JavaScript庫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();

我正在尋找添加一個構造函數,它將從一開始就初始化一些私有變量,即一旦創建對象,並且不必進行任何額外的函數調用。

我該怎麼做?

謝謝。

回答

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功能,以此作爲將變量保存到本地或會話存儲的一種方式。

乾杯。

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()) 
+0

謝謝,但我寧願堅持我原來的'主題',你知道我可以用我現在的格式來實現嗎? –

+0

剛剛添加了另一種方法。 –

+0

謝謝。我想出了一個不調用'init'的方法。我會很快發佈答案。 –

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); 

OR

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);