js中this 的指向大致可以分为以下四个场景
- 在对象的方法中使用,this指向当前的对象
var obj = {
a: "hhh",
test() {
return this.a;
}
}
console.log(obj.test());//'hhh'
-
在独立的函数中使用
在严格模式下,this指向undefined;
非严格模式下,this指向全局对象,比如window;
var a = "jjj"
var obj = {
a: "hhh",
test() {
return this.a;
}
}
const test = obj.test;
console.log(test());//"jjj"
-
通过call\apply\bind来指定
三者都可传入一个要改变的this的值,来改变this指向,
区别就是call\apply改变的同时执行函数,bind不执行,而是返回这个函数
call\apply 第一个参数就是要改变的this的值,区别就是call传入的是参数列表,apply传入的是参数数组
-
构造函数
如果一个函数是构造函数,那么this就指向它实例化出来的对象
-
箭头函数
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this,
另外箭头函数里也不能使用call\apply\bind修改this的指向
参考: