ES6:如何引用一个实例方法绑定到"这个"?

时间:2014-08-06 21:56:00

标签: javascript methods binding ecmascript-6

采用以下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,这可能是错误的。

1 个答案:

答案 0 :(得分:3)

我不认为javascript具有绑定方法的概念,这意味着methodRef已经注意到了实例。

所以:

instance.myMethod()methodRef.call(instance)

等效

methodRef()methodRef.call()

等效

我认为你要找的是:var methodRef = instance.myMethod.bind(instance)