KnockoutJS通过ko.utils.extend继承功能

Cam*_*kew 7 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 ParentVM());

    self.SomeVar = "hello";
}
Run Code Online (Sandbox Code Playgroud)

但是,当MyFunc被调用时,SomeVar是未定义的.

Cam*_*kew 10

如果有人在努力解决这个问题,我在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";
}
Run Code Online (Sandbox Code Playgroud)


RP *_*yer 5

你想要使用this而不是selfin MyFunc.它现在的编写方式,MyFunc将始终使用self设置为thisParentVM实例的值.