关于ES6中this指向的问题,搜索了一些视频和文字教程,看得我自己云里雾里。
遂翻红宝书第四版至300页,原来这么简单。
总结为两句话:
1, 标准函数this引用的是把函数当成方法调用的上下文对象
2, 箭头函数this引用的是定义箭头函数的上下文(call 等方法无法改变其指向)
再加一句吧:
- 闭包里函数的this在非严格模式下指向window,严格模式下指向undefine
原文:
来举例子:
var name = 222;
var a = {
name: 111,
say: function () {
console.log(this.name);
},
};
var fun = a.say;
fun(); //222 因为fun()的上下文是window
a.say(); //111 因为这里是a才是调用say()的上下文对象,所以this指向a
var b = {
name: 333,
say: function (fun) {
fun();
},
};
b.say(a.say); //222 函数中的函数,this指向window(非严格模式)
b.say = a.say; //这样就不是闭包啦,this指向重新变成了调用它的上下文对象,也就是b
b.say(); //333