为什么我们不需要绑定此功能?

时间:2019-02-19 10:03:55

标签: javascript ecmascript-6 bind arrow-functions

我有这个小提琴:

https://jsfiddle.net/moj94s0e/1/

我正在玩两个ES6类。

第一个是一个简单的类,带有一个构造函数和一个方法(包含)。

class Names {
  constructor (names) {
    this.names = names;
  }
  contains (names) {
    console.log(this);
  }
}

第二个是另一个类(React组件),它使用包含第一个的方法:

class Hello extends React.Component {
  constructor(props) {
    super(props);

    this.namesInstance = new Names(["Madrid", "Paris"]);
  }

  handleClick = () => {
   this.namesInstance.contains(["Madrid"]);
  }

  render() {
    return <div onClick={this.handleClick}>Hello {this.props.name}</div>;
  }
}

我的问题很简单:考虑到它未绑定在任何地方(在构造函数中,调用中或用箭头声明),我怎么可能在contains方法中访问它?功能)?

如果将其更改为箭头功能,那么我也可以看到类名登录到控制台,包括contains方法。

我不了解这种行为。

如果有人可以帮助,请

1 个答案:

答案 0 :(得分:0)

这是arrow functions的预期行为。

它们用于短函数表达式,在这种表达式中,没有自己的站点调用范围是没有意义的,此外,能够访问外部 this 更加方便。