淘汰赛自我&这个关键字得到了

时间:2013-07-12 11:13:11

标签: javascript knockout.js

    <img src="http://www.aero-sa.com/images/ajax-loader.gif" data-bind="visible:loading" />
var model = function() {
    var self = this;
    this.loading =  ko.observable(true);
    setTimeout(function() {
        self.loading(false);
    }, 4000);
}
ko.applyBindings(new model());

我对上面的代码几乎没有疑问。这里的this关键字是什么? 这个表示什么?当我写代码时,图像没有得到隐藏....为什么这个关键字不能正常工作setTimeout。

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

请尽可能解释。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

第二个this无效,因为您更改了this有效的上下文...第二个this仅对setTimeout函数内的属性有效。

这样可行:

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

答案 2 :(得分:1)

在setTimeout中,'this'上下文是 Window 对象。 其中setTimeout的 this outsite是模型类构造函数。 所以你必须使用:

var self = this;

然后在setTimeout里面使用self而不是this。