This question already has answers here:
How to access the correct `this` inside a callback?
(12个答案)
1年前关闭。
假设我有扩展了
这是与
这是无状态的
单击时,我成功到达
如果我只是直接从
我在这里想念什么?
或者
(12个答案)
1年前关闭。
假设我有扩展了
CtrlOne
的CtrlTwo
和在componentOne
模板中实例化的CtrlOne
。一些代码(我跳过了大多数不相关的代码,因此问题将更加清楚):class CtrlOne extends CtrlTwo {
constructor() { super(); }
}
class CtrlTwo {
sayMyName(name: string) {
console.log(this.getMyLastName() + name);
}
getMyLastName() {
return 'squarepants';
}
}
这是与
CtrlOne
关联的模板:<component-one data-say-my-name="vm.sayMyName"></component-one>
这是无状态的
componentOne
:angular.module('mymodule').component('componentOne', {
bindings: {
sayMyName: '&'
},
template: '<button data-ng-click="$ctrl.sayMyName()('spongebob')></button>'
});
单击时,我成功到达
sayMyName
的函数CtrlTwo
,但是它拒绝识别this.getMyLastName
,而是抛出TypeError: this.getMyLastName is not a function
。如果我只是直接从
sayMyName
模板中使用getMyLastName
或CtrlOne
,则一切正常。但是,如果我通过传递给componentOne
的绑定(bind)使用它,则会收到错误消息。我在这里想念什么?
最佳答案
应该用作回调的类方法应绑定(bind)到其上下文。
喜欢
class CtrlTwo {
constructor() {
this.sayMyName = this.sayMyName.bind(this);
}
...
}
或者
class CtrlTwo {
sayMyName = (name: string) => { ... }
...
}
10-07 21:55