this
函数可以在不同的运行环境下执行,所以需要一种机制,可以在函数体内内部获取当前的运行环境(context),this它的作用就是在函数体内部,指代当前的运行环境。
全局上下文
- 全局上下文默认this指向window, 严格模式下指向undefined。
直接调用函数
-
let obj = { a: function() { console.log(this); } } let func = obj.a; func();
- 这种情况是直接调用。this相当于全局上下文的情况。
对象.方法的形式调用
- this指向这个对象
DOM事件绑定
- onclick和addEventerListener中 this 默认指向绑定事件的元素。
- IE比较奇异,使用attachEvent,里面的this默认指向window。
new+构造函数
- 此时构造函数中的this指向实例对象。
箭头函数
-
箭头函数没有this, 因此也不能绑定。里面的this会指向当前最近的非箭头函数的this,找不到就是window(严格模式是undefined)。比如:
-
let obj = { a: function() { let do = () => { console.log(this); } do(); } } obj.a(); // 找到最近的非箭头函数a,a现在绑定着obj, 因此箭头函数中的this是obj
优先级
- new > call、apply、bind > 对象.方法 > 直接调用。
其他this总结
http://www.ruanyifeng.com/blog/2018/06/javascript-this.html
https://segmentfault.com/a/1190000021764752
http://47.98.159.95/my_blog/blogs/javascript/js-api/006.html#_1-全局上下文
https://blog.csdn.net/weixin_44153194/article/details/103543060