我正在使用新的ES6 Classes,并且我很难理解为什么我可以引用this
变量是其中一种方法。
// CLASS
class Form{
constructor(){
var self = this;
}
assemble(){
log(self);
}
}
// CALLED
var form = new Form();
form.assemble();
// RETURN
window object (not the reference to the class object)
答案 0 :(得分:2)
this
不是变量。它更像是函数的隐含参数。
您无法访问示例中的self
,因为它是构造函数中的局部变量,因此assemble
方法无法使用它。
根据您的示例,您根本不需要self
,只需使用this
:
class Form {
assemble(){
log(this); // ***
}
}
var form = new Form();
form.assemble();
如果您将form.assemble
传递给不能保证使用正确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
但你可能不需要这样做。