我一直在运行下面的代码,我注意到在devtools中运行时,obj.hi = 'default',而在我的机器上运行iojs 3.3.1时,obj.hi = 'foo‘。"This“是devtools中的窗口,而"this”是iojs中的对象。避免在.call中使用箭头来避免这种情况通常是一种好的做法吗?
'use strict'
let obj = {
hi: "default"
}
let foobar = () => {
console.log(this)
this.hi = "foo"
}
foobar.call(obj)
console.log(obj)发布于 2016-05-26 03:24:11
请参阅MDN上的Arrow Functions:
由于这已经在词法上进行了绑定,因此通过
()或()方法调用箭头函数只能传入参数,但对此没有任何影响:
因此,您可以将call和apply与箭头函数一起使用,但不能影响它们的this值:它们从包含的作用域中获取this。您可以使用io.js动态更改this,这一事实表明它在规范的这一部分中已经被打破了。
https://stackoverflow.com/questions/37445878
复制相似问题