this
this-用于访问当前方法所属的对象
const Obj = { name: 'jack', fn() { console.log(this == Obj); } }
Obj.fn();
|
function showThis() { console.log(this); }
show();
'use strict'; function showThis() { console.log(this); }
showThis();
setTimeout(showThis, 100);
window.setTimeout(showThis, 100);
|
每个新生成的函数内部都会新建一个 this、这个 this 在函数被调用的时候被绑定
this 在运行时进行绑定
this 提供了一种更为优雅的方式隐式传递一个对象的引用,让 API 设计更加简洁且易于复用
应用场景:
- 普通函数中的 this 指向全局
- 构造器里的 this 指向 new 返回的新对象
- 函数作为方法被调用时,this 指向该对象
- 箭头函数不会创建自己的 this,使用一个封闭上下文中的 this
改变 this 的指向:
forEach 中的 this 指向
const myForEach(cb, thisArg) { for(let i = 0; i < this.length; i ++) { cb.call(thisArg, (this[i])); } }
const arr = [1, 2, 3]; arr.forEach(function(item){ console.log(this, item); })
|
改变 this 指向 call 里面的参数