我已经尝试了一段时间的ES6,我只是遇到了一个小问题.
我真的很喜欢使用箭头功能,只要我能,我就会使用它们.
但是,看起来你无法绑定它们!
这是功能:
var f = () => console.log(this);
Run Code Online (Sandbox Code Playgroud)
这是我想要将函数绑定到的对象:
var o = {'a': 42};
Run Code Online (Sandbox Code Playgroud)
这里是我会怎么绑定f到o:
var fBound = f.bind(o);
Run Code Online (Sandbox Code Playgroud)
然后我可以打电话fBound:
fBound();
Run Code Online (Sandbox Code Playgroud)
哪个会输出这个(o对象):
{'a': 42}
Run Code Online (Sandbox Code Playgroud)
凉!可爱!除了它不起作用.它不输出o对象,而是输出window对象.
所以我想知道:你能绑定箭头功能吗?(如果是这样,怎么样?)
我在Google Chrome 48和Firefox 43中测试了上面的代码,结果是一样的.
所以我正在努力学习反应,并.bind(this)在构造函数中与理解混淆了一点.但是我想我现在明白了,只是想知道为什么我会在onClick中使用它与箭头函数.见下面的代码:
绑定方法确保eventClick函数中的'this'引用该类
Class Click extends react.Component {
constructor(props) {
super(props)
this.clickEvent = this.clickEvent.bind(this);
}
render = () => (
<button onClick={this.clickEvent}>Click Me</button>
)
clickEvent() {console.log(this)} // 'this' refers to the class
}
Run Code Online (Sandbox Code Playgroud)
但是这个方法也引用了这个类.是否有任何赞成/反对使用一个与另一个?
Class Click extends react.Component {
render = () => (
<button onClick={() => {this.clickEvent()}}>Click Me</button>
)
clickEvent() {console.log(this)} // 'this' refers to the class
}
Run Code Online (Sandbox Code Playgroud)