采用以下ES6代码:
class MyClass {
constructor() {
this.attribute = 'test'
}
myMethod() {
console.log(this.attribute)
}
}
// works - prints 'test'
var instance = MyClass()
instance.myMethod()
// doesn't work - outputs "undefined". "this" isn't bound to the function.
var methodRef = instance.myMethod
methodRef()
最初,我曾预料到第二个例子会绑定"这个"对于该方法,但在考虑之后,虽然instance.method(arg)
是method(instance, arg)
的语法糖是有意义的。首先 - 它只是语法糖吗?在ES5中,大多数" class"实施没有这个问题。其次,有没有办法实现我想要做的事情?
注意:我使用的是es6-transpiler,这可能是错误的。
答案 0 :(得分:3)
我不认为javascript具有绑定方法的概念,这意味着methodRef已经注意到了实例。
所以:
instance.myMethod()
与methodRef.call(instance)
methodRef()
与methodRef.call()
我认为你要找的是:var methodRef = instance.myMethod.bind(instance)