【问题标题】:What are the solutions for avoiding "that"?避免“那个”的解决方案是什么?
【发布时间】:2015-11-19 13:15:37
【问题描述】:

所以采取以下简单的javascript类sn-p:

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 that=this,并使用 that.publicvar,或者,我们可以这样做。

setTimeout(function() { c.privileged() }, 1);   //c.this -> Class

多么棒的解决方案和简单的解决方法,现在我不必在课堂上到处乱写“那个”了。更不用说,在使用 object.prototype.publicMethod 时,使用“that”会变得更加复杂。

所以,我的问题是:还有哪些其他情况需要您担心“this.publicvar”中的“this”被绑定到窗口上下文,每种情况的解决方案是什么? (我希望我们为每一个都有一个解决方案,所以我永远不必使用它!:)

【问题讨论】:

    标签: javascript closures this settimeout javascript-objects


    【解决方案1】:

    使用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);  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 2021-10-26
      • 2016-07-09
      • 2013-07-03
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多