Javascript KnockoutJS通过ko.utils.extend继承功能
我试图将功能从父视图模型继承到子视图模型,如下所示:Javascript KnockoutJS通过ko.utils.extend继承功能,javascript,inheritance,knockout.js,Javascript,Inheritance,Knockout.js,我试图将功能从父视图模型继承到子视图模型,如下所示: function ParentVM() { var self = this; self.MyFunc = function () { console.log(self.SomeVar); // this logs "undefined" } } function ChildVM() { var self = this; ko.utils.extend(self, new Paren
function ParentVM() {
var self = this;
self.MyFunc = function () {
console.log(self.SomeVar); // this logs "undefined"
}
}
function ChildVM() {
var self = this;
ko.utils.extend(self, new ParentVM());
self.SomeVar = "hello";
}
但是,当调用
MyFunc
时,SomeVar
是未定义的。您希望在MyFunc
中使用this
而不是self
。按照现在的编写方式,MyFunc
将始终使用self
,该值设置为this
的值,这是新的ParentVM
实例。如果有人对此感到困惑,我在KnockoutJS框架之外找到了一个解决方案:
function ParentVM() {
var self = this;
self.MyFunc = function () {
console.log(self.SomeVar);
}
}
function ChildVM() {
var self = this;
ParentVM.apply(self); // this instead
self.SomeVar = "hello";
}
嘿,Ryan,你博客的粉丝;)。我试过了,但它不起作用-当我记录
这个,它会说这是家长的家长视图模型..奇怪..你的答案也是一个不错的选择,因为它会从家长VM
运行代码,但不会创建一个新实例并将你的孩子VM
用作这个。这里有一个小把戏:这个这个,但是你这样做也是一个很好的选择。如果你真的开始使用这个原型,那么你必须做一些额外的工作来确保这些功能/属性是可用的。真奇怪,我在你的小提琴和事件中看到它工作,当我添加一个祖父母虚拟机时,它似乎仍然工作,但在我的应用程序中(它要复杂得多,必须有其他的事情发生),它不起作用了。我会看看我是否能切中要害。我想底线是的上下文。我的应用程序不知怎么搞砸了。我知道javascript可以通过这个