我有一个成员函数render()。此函数调用类add(any)的另一个成员。这是片段。
render(){
collection.each(this.add);
}
如果我在添加中使用关键字“this”,则类型为window。我希望它是成员类的实例。
在构造函数,成员函数或成员访问器中,这是包含类的类实例类型。
答案 0 :(得分:16)
正如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));
}
答案 1 :(得分:4)
我不认为这是一个错误。
您不再属于render()
函数的范围,而是在each()
的范围内。
试试这个:
render(){
var that = this;
collection.each(that.add);
}