3

我正在使用新的ES6 类,并且很难理解为什么我可以引用该this变量是其中一种方法。

//班级

class Form{ 
    constructor(){
        var self = this;
    }   

    assemble(){
        log(self);
    }
}

//调用

var form = new Form();
form.assemble();

//返回

window object (not the reference to the class object)
4

1 回答 1

3

this不是变量。它更像是函数的隐藏参数。

您无法self在您的示例中访问,因为它是构造函数中的局部变量,因此您的assemble方法无法使用它。

您根本不需要self您的示例,只需使用this

class Form {
    assemble(){
        log(this);             // ***
    }
}
var form = new Form();
form.assemble();

如果您要传递form.assemble的东西不能保证用 right 调用它,则this可以通过在构造函数中定义它来定义assemble为实例函数成员;然后它会关闭self。但是在 ES2015 及更高版本中你不需要这样做self;只需使用一个箭头函数,它会关闭this

class Form {
    constructor(){
        var self = this;
        this.assemble = () => {
            log(this);
        };
    }   
}
var form = new Form();
form.assemble();          // Works
var f = form.assemble;
f();                      // Also works

但很可能你不需要这样做。

于 2016-11-28T18:31:24.897 回答