從單個實例和多實例的角度來看,爲什麼我會在模塊模式之後編寫所有這些額外的代碼行,而只是使用標準構造函數來定義方法和屬性在構造函數體中?JavaScript模塊模式vs構造函數,使用構造函數中定義的方法
模塊模式樣本:http://jsfiddle.net/T3ZJE/1/
var module = (function() {
// private variables and functions
var foo = 'bar';
// constructor
var module = function() {
};
// prototype
module.prototype = {
constructor: module,
something: function() {
}
};
// return module
return module;
})();
var my_module = new module();
console.log(my_module)
構造樣本:http://jsfiddle.net/EuvaS/2/
function Module(){
// private variables and functions
var foo = 'bar';
//public methods
this.something = function() {
}
}
var my_module = new Module();
console.log(my_module);
對我來說,最終的結果是幾乎一樣的。兩者都可以具有公共屬性和方法,都可以具有可以通過公共方法訪問的「私有」變量和方法。
兩者都將爲單例定義公共/原型方法,兩者都會爲對象的多個實例/克隆多次定義它們。
我錯過了什麼嗎?有什麼不同?
這確實是一個重要的區別。 – Fergal
對於poops和giggles,這個對Constructor方法的輕微修改將創建靜態私人變量,並且只允許一次定義我們的公共方法,同時允許它們訪問構造器範圍中的所有私人變量:http://jsfiddle.net/zHwQX/2/ – Fergal
@Fergal好點,也沒有看到這一點。所以我想整體,更多的功能和更小的內存佔用 – Damp