我有一个成员函数render()。此函数调用类 add(any) 的另一个成员。这是片段。
render(){
collection.each(this.add);
}
如果我在add中使用关键字“this”,则类型为window。我希望它是成员类的实例。
在构造函数、成员函数或成员访问器中,this 属于包含类的类实例类型。
我有一个成员函数render()。此函数调用类 add(any) 的另一个成员。这是片段。
render(){
collection.each(this.add);
}
如果我在add中使用关键字“this”,则类型为window。我希望它是成员类的实例。
在构造函数、成员函数或成员访问器中,this 属于包含类的类实例类型。
正如 JcFx 指出的那样,您的this
范围在each
回调中是不同的。
但是,如果您使用“胖箭头”匿名函数,它将使用词法范围规则,this
以便您获得所需的内容:
render(){
collection.each((x) => this.add(x));
}
编译为以下 JavaScript:
X.prototype.render = function () {
var _this = this;
collection.each(function (x) {
return _this.add(x);
});
}
另一种选择是显式bind
调用add
所需的this
:
render(){
collection.each(this.add.bind(this));
}
我不认为这是一个错误。
您不再在render()
函数的范围内,而是在each()
.
尝试这个:
render(){
var that = this;
collection.each(that.add);
}