ko.utils.extend不会覆盖模型中的属性

时间:2014-07-24 14:07:12

标签: javascript knockout.js

为什么ko.utils.extend不会覆盖this.selectItem?在这里它始终显示1的警报。

         var ViewModel = function () {
           this.selectItem = function () { alert(1) };
          };
        }

        ko.utils.extend(ViewModel.prototype, {
            selectItem: function () {
                alert("from extend");
            }

1 个答案:

答案 0 :(得分:3)

extend没有覆盖它的原因是它不是原型属性。它是构造函数添加到实例的属性,它隐藏(隐藏)原型属性。

以下是发生的顺序(注意 - 我修复了问题代码中的语法错误,并添加了视图模型的实例化)

// 1 - the `ViewModel` function is created, along with `ViewModel.prototype`
var ViewModel = function () {
    // 4 - the instance gets its own `selectItem` property
    this.selectItem = function () { alert(1) };
};

// 2 - `selectItem` is added to `ViewModel.prototype`
ko.utils.extend(ViewModel.prototype, {
    selectItem: function () {
        alert("from extend");
    }
});

// 3 - an instance is created; its underlying prototype is set from `ViewModel.prototype`
var vm = new ViewModel();