我想完成的任务:在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