Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript KnockoutJS通过ko.utils.extend继承功能_Javascript_Inheritance_Knockout.js - Fatal编程技术网

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可以通过
这个