有什么办法可以避免这种情况的发生?

What are the solutions for avoiding "that"?

本文关键字:情况 什么 可以避免      更新时间:2023-09-26

使用以下简单的javascript类片段:

var Class = function() {
    this.publicvar = 1;
    this.privileged = function() {
        return this.publicvar;
    };
};
var c = new Class();
setTimeout(c.privileged, 1);                    //c.this -> window

显然这行不通,"this"将是窗口对象。此时我们可以用var =this,然后使用它。publicvar, OR,我们可以这样做。

setTimeout(function() { c.privileged() }, 1);   //c.this -> Class
这是一个很好的解决方案,很容易修复,现在我不必在我的课上到处放"that"了。更不用说,当使用object.prototype.publicMethod时,使用"that"会变得复杂得多。

所以,我的问题是:在其他情况下,你需要担心"this"中的"this"。Publicvar"被绑定到窗口上下文,每个问题的解决方案是什么?(我希望我们对每一个问题都有一个解决方案,这样我就不必使用它了!:)

使用Functionbind:

setTimeout(c.privileged.bind(c), 1);

或者你可以在构造函数中预设bind,但这在JS中可能是相当意外的,而在Python中是默认的:

var Class = function() {
    this.publicvar = 1;
    this.privileged = (function() {
        return this.publicvar;
    }).bind(this);
};
var c = new Class();
setTimeout(c.privileged, 1);  
相关文章: