一:obj.fun()对象中的this指的是:.前的obj对象 --obj
var obj={
name:'ls',
age:19,
say(){
console.log(this.age)
}
}
obj.say()
二:匿名函数自调和回调函数中的 this指向window;严格模式下this指向undefined
// 方法中的this -- window
function fun1(name){
this.name= name ;
console.log(this)
}
fun1('aa')
三:new构造函数()里面的this 指向new正在创建的新对象 -- person
function fun2(name){
this.name= name;
this.say= function(){
console.log(this)
}
}
var person= new fun2('ls')
person.say()
四:构造函数原型(.prototype.eat=function(){})里面的this指向”子对象.fun()”中点前子对象 -- person
function fun3(name){
this.name= name;
}
fun3.prototype.eat= function(){
console.log(this)
}
var person= new fun3('ls')
person.eat();
五:DOM事件处理函数里的this指向当前正在出发事件的.前的DOM元素对象。
button.onclick=function(){}
或
button.addEventListener(“click”,function(){…})
六:Vue中this默认都指当前vue对象
七:箭头函数中的this指向当前函数之外最近的作用域中的this
- 几乎所有匿名函数都可用箭头函数简化
- 箭头函数是对大多数匿名函数的简写
解析:根据上面的概念--箭头函数指向的是其最近的作用域中的this,也就是intr 方法中的this 。
根据第一点:对象中方法的this指向的是 .前的obj对象 也就是lilei;
结论:箭头函数中的this.sname == lilei.sname;
var lilei = {
sname: "Li Lei",
friends: ["涛涛", "楠楠", "东东"],
intr: function () {
this.friends.forEach(
(item)=> {
console.log(`${this.sname} 认识 ${item}`)
})
}
}
lilei.intr();
// Li Lei 认识 涛涛
// Li Lei 认识 楠楠
// Li Lei 认识 东东
思考:为什么把箭头函数改成function之后就this.sname == undefined 了?
var lilei = {
sname: "Li Lei",
friends: ["涛涛", "楠楠", "东东"],
intr: function () {
this.friends.forEach(
function (item) {
console.log(`${this.sname} 认识 ${item}`)
})
}
}
lilei.intr();
// undefined 认识 涛涛
// undefined 认识 楠楠
// undefined 认识 东东
解析:参考第二点-匿名函数及自调用函数this指向window;见下图
备注:从上述内容可能会让你感觉--箭头函数没有作用域或者不是作用域!
错误理解
解析:箭头函数只让this指向外部作用域的this。而箭头函数内的局部变量,依然只能在箭头函数内使用。出了箭头函数不能用!
总结:箭头函数依然是作用域!只不过影响this而已!不影响局部变量
向东神致敬(* ̄︶ ̄)!