function says(say){ setTimeout(function(){ console.log(this.type + ' says ' + say) }.bind(this), 1000) }
但现在我们有了箭头函数,就不需要这么麻烦了:class Animal2 { constructor(){ this.type = 'animal' } says(say){ setTimeout( () => {console.log(this); console.log(this.type + ' says ' + say) }, 1000) } } var animal2 = new Animal2(); animal2.says('hi') ; //animal says hi
箭头函数有几个使用注意点。1.函数体内的this对象,即绑定定义时所在的对象,而不是使用时所在的对象。
并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,它的this是继承外面的,因此内部的this就是外层代码块的this。
2.不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
3.不可以使用arguments对象,该对象在函数体内不存在。
上面三点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。
此篇终,待续……