【问题标题】:How to make an arrow function a method in a Javascript Class? [duplicate]如何使箭头函数成为 Javascript 类中的方法? [复制]
【发布时间】:2017-04-18 00:13:06
【问题描述】:

我突然想到:

class Jamie {
    method function(){
        .... //Is a method
    }

    notAMethod = () => {
        ....//Is not a method?
    }
}

我显然对这件事感到困惑,但为什么我不能使用箭头函数并维护this = Jamie 的上下文?而不是使用bind 来保持上下文?

【问题讨论】:

  • 不,这是分配给箭头函数的类属性。它本身不是一种方法。
  • 它不是 ES6 的一部分,因为它仍然是一个命题,但你可以使用 babel 的 Class properties transform 来做到这一点。
  • 所以确实它不是一种方法,而只是一个属性,这在 imo 中是不好的做法。因为它会导致意外的行为。然而,我很懒惰。
  • 当您执行this.method = this.method.bind(this) 时,您也会获得一个属性。使用箭头函数更短,更具表现力。
  • method function(){…} 不是完全有效的语法。

标签: javascript


【解决方案1】:

您可以使用constructor 函数和this 关键字来分配这些方法,并让正确的this 在没有任何binds 的情况下工作。

class Jamie {
    constructor () {
        this.getContext = () => {
            console.log(this) // returns Jamie
        }
    }
}
new Jamie().getContext()

在上面的示例中,getContext 将返回 Jamie 类,因为它是 this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 2017-03-05
    • 2019-08-04
    • 1970-01-01
    • 2018-06-30
    • 2018-06-03
    相关资源
    最近更新 更多