对象里的函数简写和正常写法
下面是三者的this指向问题
var obj1 = {
fun () {
console.log(this);
}
};
var obj2 = {
fun: function () {
console.log(this);
}
}
var obj3 = {
fun: () => {
console.log(this)
}
}
obj1.fun(); //obj1
obj2.fun(); //obj2
obj3.fun(); //window
讲解
-
fun () {}
这是对象里面函数的简写跟,跟fun: function(){}
一样,两者的this指向都是最原始的,谁调用指向谁 -
() =》 {}
箭头函数的this指向为 是他定义时的上一级作用域的this指向,也就是说箭头函数是在哪个作用域下定义的,他的this指向就是那个作用域的this指向
例子如下
var obj = {
pro: {
getPro: ()=>{
console.log(this);
}
}
}
obj.pro.getPro() //window
箭头函数是在getPRo这里定义的,他上一级是一个pro对象,这不是作用域,所以上一级的作用域就是var obj ,也就是全局作用域window
除此之外再说个this指向加深理解
var obj = {
say: function() {
var f1 = ()=>{
console.log("1111",this);
}
f1();
}
}
var o = obj.say;
o();//f1执行时,say函数指向window,所以f1中的this指向window
obj.say();//f1执行时,say函数指向obj,所以f1中的this指向obj;
网友评论