箭头函数的this指向问题
箭头函数的this指向问题new创建的实例对象普通函数的调用【1】:普通函数的调用 分为三种
箭头函数【2】箭头函数:跟函数定义的位置有关系 箭头函数内的没有this的指向,都是翻出箭头函数查找上层的this的!
定时器和延时器中
箭头函数的this指向问题
【0】new创建的实例对象 — this指向的是new创建的实例对象【1】普通函数:跟函数定义没有关系,主要看函数调用方法
1】主动调用 函数名() 函数中的特=this指向window (就是在全局作用域下调用)2】事件驱动调用 ele.事件类型 = 函数名; 函数中的this指向 ele3】当对象中 写 函数的时候, 调用函数 对象.函数名() 函数中的this指向 对象 【2】箭头函数:跟函数定义的位置有关系
哪怕箭头函数写在对象中,但是函数的this 还是指向这个对象所处环境this的指向 obj.fn() this不会指向obj 【3】定时器和延时器
1】:他们使用普通函数的方式设置的时候,都是指向window2】:他们使用箭头函数的方式设置的时候,都是查找上才文的this
new创建的实例对象
this指向的是new创建的实例对象
let Star = function (name
, age
) {
this.name
= name
,
this.age
= age
console
.log(this);
}
let ldh
= new Star("刘德华", 34)
普通函数的调用
【1】:普通函数的调用 分为三种
let fu = function () {
console
.log(this);
}
fu()
let btn
= document
.querySelector(".btn")
let fu1 = function () {
console
.log(this);
}
btn
.onclick
= fu1
;
let obj
= {
name
: "pink",
age
: 18,
fu2
: function () {
console
.log(this);
}
}
obj
.fu2()
箭头函数
【2】箭头函数:跟函数定义的位置有关系 箭头函数内的没有this的指向,都是翻出箭头函数查找上层的this的!
let fn = () => {
console
.log(this);
}
fn();
let fn1 = function () {
let f1 = () => {
console
.log(this);
}
f1()
}
fn1();
let obj2
= {
name
: "pink",
age
: 12,
f2
: () => {
console
.log(this);
}
}
obj2
.f2()
定时器和延时器中
1】:他们使用普通函数的方式设置的时候,都是指向window2】:他们使用箭头函数的方式设置的时候,都是查找上才文的this
let n
= 0;
let timer
= setInterval(function () {
n
++
if (n
== 2) {
clearInterval(timer
)
}
}, 1000)
let f3 = function () {
var n
= 0;
let timer
= setInterval(function () {
n
++;
if (n
=== 2) {
clearInterval(timer
)
}
}, 1000)
}
f3()
let n1
= 0;
let timer1
= setInterval(() => {
n1
++
if (n1
== 2) {
clearInterval(timer1
)
}
}, 1000)
let f4 = function () {
var n
= 0;
let timer
= setInterval(() => {
n
++;
console
.log(this);
if (n
=== 2) {
clearInterval(timer
)
}
}, 1000)
}
f4()
let n0
= 0;
let obj3
= {
name
: "pink",
age
: 12,
f2
: function () {
let timer0
= setInterval(function () {
n0
++
if (n0
== 2) {
clearInterval(timer0
)
}
})
}
}
obj3
.f2()
let obj4
= {
name
: "pink",
age
: 12,
f2
: function () {
let timer0
= setInterval(() => {
n0
++
console
.log(this);
if (n0
== 2) {
clearInterval(timer0
)
}
})
}
}
obj4
.f2()