Skip to main content

箭头函数

对象+箭头函数

var id = "GLOBAL";
var obj = {
id: "OBJ",
a: function () {
console.log(this.id);
},
b: () => {
console.log(this.id);
},
};
obj.a(); // 'OBJ'

obj.b(); // 'GLOBAL'
//对象字面量加箭头函数,绑定不了对象this
//因为this绑定被放在对象外,作为全局语句执行

new obj.a(); // undefined
// 经过 new 操作,obj.a()的 this 被绑定为了新返回的实例
// 因此找不到 this.id

new obj.b(); // Uncaught TypeError: obj.b is not a constructor
// 而 obj.b()为箭头函数,无法被 new

结合 setTimeout

const obj = {
num: 10,
a: function () {
num = 20;
setTimeout(function () {
console.log(this); // window 匿名函数调用,this为全局
console.log(this.num); // 20
}, 3000);
},
b: function () {
setTimeout(() => {
console.log(this); // obj, 箭头函数会找b被调用的情况
console.log(this.num); // 10
}, 3000);
},
};

obj.a();
obj.b();