我有一个成员函数render().此函数调用类add(any)的另一个成员.这是片段.
render(){
collection.each(this.add);
}
Run Code Online (Sandbox Code Playgroud)
如果我在添加中使用关键字"this",则类型为window.我希望它是成员类的实例.
在构造函数,成员函数或成员访问器中,这是包含类的类实例类型.
Joh*_*yHK 16
正如JcFx指出的那样,你的this范围在each回调中是不同的.
但是,如果你使用'胖箭头'匿名函数,它将使用词法范围规则,this以便你得到你想要的东西:
render(){
collection.each((x) => this.add(x));
}
Run Code Online (Sandbox Code Playgroud)
编译为以下JavaScript:
X.prototype.render = function () {
var _this = this;
collection.each(function (x) {
return _this.add(x);
});
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是明确bind的add调用所需this:
render(){
collection.each(this.add.bind(this));
}
Run Code Online (Sandbox Code Playgroud)
我不认为这是一个错误。
你不再在render()函数的范围内,而是在 的范围内each()。
尝试这个:
render(){
var that = this;
collection.each(that.add);
}
Run Code Online (Sandbox Code Playgroud)