我想完成的任務:在javascript中使用原型創建模塊,以便用戶可以多次實例化模塊,每個模塊有不同的選項。使用原型創建多個實例使用原型創建多個實例
的問題:使用var my_module3 = new module();
,然後嘗試設置選項與my_module3.init({ option: "value" });
每次不改變對象時,它只會改變一次。
測試:使用console.log
我們可以看到,它打印出帶有即使它們設置不同
Object {first: "Barry", second: "Larry", third: "Sam"}
Object {first: "Barry", second: "Larry", third: "Sam"}
這裏是我的jsfiddle完整的代碼相同的選項,這兩個對象:http://jsfiddle.net/11bLouc8/2/
var module = (function() {
// default options
var options = {
first: "test",
second: "test2",
third: "test3"
};
// take in useroptions and replace default options
var module = function(userOptions) {
if (userOptions != null && userOptions != undefined
&& userOptions != 'undefined') {
for (var opt in options) {
if (userOptions.hasOwnProperty(opt)) {
options[ opt ] = userOptions[ opt ];
}
}
}
};
//prototype
module.prototype = {
init: module,
options: options
};
return module;
})();
// create a new instance
var my_module3 = new module();
my_module3.init({
first: "Mike",
second: "Lisa",
third: "Mary"
});
// another instance
var my_module2 = new module();
my_module2.init({
first: "Barry",
second: "Larry",
third: "Sam"
});
爲什麼你的代碼修改默認選項?您需要爲每個實例創建一個新對象! – Bergi 2014-10-17 15:01:10
http://stackoverflow.com/questions/6504726/how-can-i-pass-parameters-to-a-module-pattern-to-override-default-values-privat – AntonB 2014-10-17 15:02:05
那麼,你問具體覆蓋在您的實例之間共享的默認值。這不是你想要的嗎? – Bergi 2014-10-17 15:04:34