Javascript 击倒自我&;这个关键字是gotach

Javascript 击倒自我&;这个关键字是gotach,javascript,knockout.js,Javascript,Knockout.js,如果可能,请解释。第二个此无效,因为您更改了此有效的上下文。。。第二个此仅对设置超时函数内的属性有效 这将有助于: var model = function() { //var self = this; this.loading = ko.observable(true); setTimeout(function() { this.loading(false); }, 4000); } ko

如果可能,请解释。

第二个
无效,因为您更改了
有效的上下文。。。第二个
仅对
设置超时
函数内的属性有效

这将有助于:

var model = function() {
        //var self = this;
        this.loading =  ko.observable(true);
        setTimeout(function() {
            this.loading(false);
        }, 4000);
    }
    ko.applyBindings(new model());

我建议您阅读以下内容:

在setTimeout中,“this”上下文是窗口的对象。 其中,这个setTimeout的外部站点属于模型类构造函数。 因此,您必须使用:

var model = function() {
    var self = this;
    self.loading =  ko.observable(true);
    setTimeout(function() {
        self.loading(false);
    }, 4000);
}
ko.applyBindings(new model());

然后在setTimeout中使用self而不是这个。

也可能是的副本,并且
console.log()
是您的朋友!为什么在我试图回答您的问题时,您创建了一个新问题:
var model = function() {
    var self = this;
    self.loading =  ko.observable(true);
    setTimeout(function() {
        self.loading(false);
    }, 4000);
}
ko.applyBindings(new model());
var self = this;