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

时间:2013-12-04 00:49:29

标签: 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";
}

但是,当调用MyFunc时,SomeVar未定义。

2 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分:5)

您希望在this中使用self代替MyFunc。现在编写方式MyFunc将始终使用selfthis设置为新ParentVM实例的{{1}}值。