我会尽力解释这个问题。我在该对象中有一个名为BaseForm
的对象,我有函数和knockout observables。我有一个名为Initialize
的函数,其中有一个对象,里面有ko observables。其中一个可观察对象称为FormVisible
,并初始化为true(FormVisible: ko.observable(true)
)。我还有一个名为OnClickRow
的函数。在此函数中,它将FormVisible
从true更改为false。我多次实例化BaseForm
。当我调用OnClickRow
时,它只会影响实例化的最后一个对象。为什么会这样?我该如何解决?
这是我的代码:
function BaseForm() {
var that = this;
BaseForm.prototype.Initialize = function(model) {
this.model = model;
this.FormVM = {
FormVisible: ko.observable(true)
}
}
BaseForm.prototype.OnClickRow = function() {
that.FormVM.FormVisible(false);
}
}
this.base1 = new BaseForm();
this.base1.Initialize("new");
this.base2 = new BaseForm();
this.base2.Initialize("old");
this.base3 = new BaseForm();
this.base3.Initialize("other");
this.base1.OnClickRow();
这是jsfiddle。
答案 0 :(得分:0)
我实际上已经弄清楚了。这是一个非常简单的修复方法。我将this.FormVM
更改为that.FormVM
,并在OnClickRow
内将that.FormVM.FormVisible(false);
更改为this.FormVM.FormVisible(false)
。我仍然不能确定为什么这种方式有效,为什么另一方没有。所以,如果有人有解释,这将是伟大的。谢谢!
这里有更新的fiddle。
答案 1 :(得分:0)
您需要将原型配置移到构造函数之外,并更改“#”;到这个':
<div>
原型继承链在&#39; new&#39;或Object.create()。因此,您不应在构造函数中声明原型方法,因为还不能保证原型链已初始化。
将这些方法移到构造函数之外意味着&#39;将是未定义的并使用&#39;这个&#39;因此,指的是所需的对象。
我建议您查看Mozilla Javascript文档,以增强您对自定义对象的了解。