gpt4 book ai didi

javascript - 自动绑定(bind)JS类方法有什么好方法?

转载 作者:行者123 更新时间:2023-11-30 08:19:21 25 4
gpt4 key购买 nike

我厌倦了这样写代码:

class Something {

constructor() {

this.method = this.method.bind(this);
this.anotherOne = this.anotherOne.bind(this);
// ...
}
}

这很耗时,而且很容易忘记绑定(bind)一个方法。我知道类字段提案,但它仍处于第 3 阶段并且似乎带有 some issues .

我当前的解决方案(基于 this answer )如下所示:

class Something {

constructor() {

// Get all defined class methods
const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(this));

// Bind all methods
methods
.filter(method => (method !== 'constructor'))
.forEach((method) => { this[method] = this[method].bind(this); });
}
}

这似乎可行,但我想知道是否有更好的方法,或者此方法是否存在我不知道的问题。

更新:为什么要这样做?

我遇到的问题是,如果我不在构造函数中绑定(bind)我的类函数,我必须记得稍后“正确地”调用它们。例如:

const classInstance = new Something();

// This fails for a non-obvious reason
someAction()
.then(classInstance.method);

// This works of course but looks like we created a useless function if you don't know better
someAction()
.then(result => classInstance.method(result));

最佳答案

使用fat arrow ES6中的函数(一般称为箭头函数)

anotherOne = ()=> {
...
}

像这样调用 onClick={this.anotherOne}; 无需在构造函数中绑定(bind)

来自ECMA spec

Any reference to arguments, super, this, or new.target within anArrowFunction must resolve to a binding in a lexically enclosingenvironment. Typically this will be the Function Environment of animmediately enclosing function.

关于javascript - 自动绑定(bind)JS类方法有什么好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56503531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com