Javascript 可观察的敲除不是一个函数

Javascript 可观察的敲除不是一个函数,javascript,knockout.js,Javascript,Knockout.js,我正在尝试一些不同的方法来添加方法到淘汰视图模型,但我遇到了一个我真的不理解的错误 function ViewModel() { var self = this; self.foo = ko.observable(null); self.hasFoo = ko.computed(self.getHasFoo); } ko.utils.extend(ViewModel.prototype, { getHasFoo: function () { r

我正在尝试一些不同的方法来添加方法到淘汰视图模型,但我遇到了一个我真的不理解的错误

function ViewModel() {
    var self = this;
    self.foo = ko.observable(null);

    self.hasFoo = ko.computed(self.getHasFoo);
}

ko.utils.extend(ViewModel.prototype, {
    getHasFoo: function () {
        return this.foo() != null;
    },
});

var vm = new ViewModel();

当我运行这个程序时,我得到一个错误,说
uncaughttypeerror:this.foo不是一个函数
。我对this.foo的实际值做了一个console.log,它确实是
未定义的
。我真的不明白为什么。这里发生了什么?

这是因为计算的上下文,这是sintax
ko.computed(handler,scope)
请参阅更新
this.hasFoo=ko.computed(self.getHasFoo,this),现在可以在代码段中看到它的工作情况

函数ViewModel(){
var self=这个;
this.foo=ko.observable(空);
this.hasFoo=ko.computed(self.getHasFoo,this);
}
ko.utils.extend(ViewModel.prototype{
getHasFoo:函数(){
返回这个.foo();
},
});
var vm=new ViewModel();
ko.applyBindings(vm)


有福啊,当然。完全忘记了(我的主要语言是c:)。我通常不将“this”传递给ko,而是在内联函数定义中使用自变量进行计算。我以前从未传递过直接函数引用。谢谢