试图正确学习箭头功能中的“ this”关键字。
在阅读和观看了一些视频后,我了解到使用常规功能,只要调用该功能,就会定义“ this”关键字。
不论您在哪里构建箭头函数,都将根据“ this”的值来定义箭头函数中的和“ this”。
所以我打开控制台并玩了两个对象和两个功能。
我这样做:
const reg = {
reg1: "reg1",
reg2: {
reg3: 'reg3',
regFunc: function(){console.log(this)}
}
}
const arrow = {
arrow1: "arrow1",
arrow2: {
arrow3: 'arrow3',
arrowFunc: () => {console.log(this)}
}
}
reg.reg2.regFunc()
VM712:5 {reg3: "reg3", regFunc: ƒ}
arrow.arrow2.arrowFunc()
VM712:13 Window {parent: Window, opener: null, top: Window, length: 1, frames: Window, …}
我获得reg对象是因为它是在显示给我的reg2对象中调用的。
但是对于arrow对象,arrow函数中的this关键字是在arrow内部的arrow2对象内部创建的。
那么为什么箭头对象arrow2中没有它的值?为什么是全局窗口?
答案 0 :(得分:4)
this
是为function
执行上下文定义的。
在定义const arrow
的代码中,没有function
上下文,只有箭头功能。因此,词汇this
是全局对象(在草率模式下)或undefined
在严格模式下。
一个常见的误解是,对象文字(分配给arrow
或arrow2
的对象文字)会以某种方式将this
绑定到它。
答案 1 :(得分:1)
箭头功能中的this
与普通变量(const
ant变量)的处理方式相似。箭头函数会在创建时记录this
的值,并且this
将始终指向箭头函数内部的值(因为您无法重新分配this
)。
答案 2 :(得分:0)
因为箭头函数不绑定自己的this,而是继承自父范围(在本例中为全局对象)
答案 3 :(得分:0)
this
指针指向window
对象,因为它是父对象。箭头函数中的this
始终指向父范围,这里是window
对象。
如果用类或函数(例如)包装该箭头函数,则this
将指向该对象。
const func = {
b: {
d: function() {
console.log(this)
}
}
}
const arrow = {
b: {
d: function() {
const e = () => {
console.log(this)
}
return e()
}
}
}
func.b.d() >> {d:f}
arrow.b.d() >> {d:f}