JavaScript 来自匿名函数的字段访问
JavaScript field access from anonymous function
如何从方法内的匿名函数访问字段?
就像这个例子:
class Something {
constructor (){
this.gax = “gax”;
}
doSomething(){
(function () {
console.log(this.gax);
}());
}
}
new Something().doSomething();
这将导致 "this" 未定义的错误。
非常感谢您,搜索了几个小时后我在网上找不到答案。
最好,
左
在你的匿名函数中,this
绑定到函数;它不再指代 class.
改用 arrow function,它没有自己的 this
绑定。
class Something {
constructor (){
this.gax = "gax";
}
doSomething(){
(() => {
console.log(this.gax);
})();
}
}
new Something().doSomething();
或者,您可以使用 .call()
、.apply()
或 .bind()
:
class Something {
constructor (){
this.gax = "gax";
}
doSomething(){
(function() {
console.log(this.gax);
}).call(this);
}
}
new Something().doSomething();
class Something {
constructor (){
this.gax = "gax";
}
doSomething(){
(function () {
console.log(this.gax);
}).apply(this);
}
}
new Something().doSomething();
您可以使用apply
方法。 apply()
方法调用具有给定 this 值的函数
如何从方法内的匿名函数访问字段? 就像这个例子:
class Something {
constructor (){
this.gax = “gax”;
}
doSomething(){
(function () {
console.log(this.gax);
}());
}
}
new Something().doSomething();
这将导致 "this" 未定义的错误。 非常感谢您,搜索了几个小时后我在网上找不到答案。 最好, 左
在你的匿名函数中,this
绑定到函数;它不再指代 class.
改用 arrow function,它没有自己的 this
绑定。
class Something {
constructor (){
this.gax = "gax";
}
doSomething(){
(() => {
console.log(this.gax);
})();
}
}
new Something().doSomething();
或者,您可以使用 .call()
、.apply()
或 .bind()
:
class Something {
constructor (){
this.gax = "gax";
}
doSomething(){
(function() {
console.log(this.gax);
}).call(this);
}
}
new Something().doSomething();
class Something {
constructor (){
this.gax = "gax";
}
doSomething(){
(function () {
console.log(this.gax);
}).apply(this);
}
}
new Something().doSomething();
您可以使用apply
方法。 apply()
方法调用具有给定 this 值的函数