我同意你的觀點,最簡單的方法是使用對象文本,但如果你想私人的成員,你可以實現服用closures優勢:
var myInstance = (function() {
var privateVar;
function privateMethod() {
// ...
}
return { // public interface
publicMethod1: function() {
// private members can be accessed here
},
publicMethod2: function() {
// ...
}
};
})();
關於new function(){}
結構,它會只需使用匿名函數作爲constructor function
,該函數內的上下文將成爲將返回的新對象。
編輯:在應對@J5's comment,說起來很簡單的事情,其實我覺得,這可能是爲使用懶惰函數定義模式一個很好的例子:
function singleton() {
var instance = (function() {
var privateVar;
function privateMethod() {
// ...
}
return { // public interface
publicMethod1: function() {
// private members can be accessed here
},
publicMethod2: function() {
// ...
}
};
})();
singleton = function() { // re-define the function for subsequent calls
return instance;
};
return singleton(); // call the new function
}
當功能被稱爲第一次,我做對象實例,並重新分配singleton
到一個新的函數,該函數在它的閉包中具有該對象實例。
在第一次通話結束之前,我執行重新定義的singleton
函數,該函數將返回創建的實例。
對singleton
函數的以下調用將簡單地返回存儲在它的閉包中的instance
,因爲新函數是將要執行的函數。
可以證明,通過比較對象返回:
singleton() == singleton(); // true
的==
操作的對象將返回true
只有兩個操作數的對象參考是一樣的,它會返回false即使對象是相同的,但它們是兩個不同的實例:
({}) == ({}); // false
new Object() == new Object(); // false
來源
2009-12-13 05:49:40
CMS
'dothis'和'dothat'提醒我波拉特 – 2010-06-11 18:02:15