注意,相关Value of this inside object method?
鉴于
var obj = {
property: 5,
func1: function () {
console.log(this.property);
},
func2: () => {
console.log(this.property);
}
}
{p> this
Window
位于obj.func2()
。
尝试使用this
将obj
设置为Function.prototype.call()
时,this
仍为Window
var obj = {
property: 5,
func1: function () {
console.log(this.property);
},
func2: () => {
console.log(this.property);
}
}
obj.func2.call(obj);
这是预期的行为吗?
为什么Function.prototype.call()
未设置context
obj.func2
到obj
?
答案 0 :(得分:4)
预计按the standard
ArrowFunction
没有为参数,super,this或new.target定义本地绑定。对arguments
中super
,this
,new.target
或ArrowFunction
的任何引用都必须解析为词汇封闭环境中的绑定。
这意味着 - 您无法设置未定义的内容。
另外,相关:
使用[[Call]]
内部插槽调用函数,将this
绑定设置为
- 执行
醇>OrdinaryCallBindThis(F, calleeContext, thisArgument)
。
反过来checks
- 让
thisMode
为F
[[ThisMode]]
内部广告位的值。- 如果
醇>thisMode
是词法,请返回NormalCompletion(undefined)
。
因此,在内部它还会检查函数是否是词法范围(箭头函数)。
参考文献: