this的指向问题

 this是JavaScript中的一个关键字,不是变量,也不是属性,它不能被赋值。

在绝大多数情况下,它的值取决于函数的调用方式。当然javascript中也有一些方式可以设置this。本文总结下this的指向问题。

函数调用时

这里的函数调用指的是,函数表达式是普通函数,而不是对象的属性。例如 x(a1,a2) 此类。

此时如果是非严格模式,函数中的this就会指向window/全局对象;严格模式时,会是undefined

    function normal() {         console.log(this);     }      // 非严格模式     normal() // window      // 严格模式     normal() // undefined 

所以,可以使用普通函数中的this关键字来判断当前是否是严格模式

    const STRICT = (function(){return !this;}());

方法调用时

方法调用指的是函数表达式是对象的属性时。例如:a.x(a1,a2)此类。

此时方法中的this指向调用该方法的对象,函数体中可以通过this引用该对象。

    let obj = {         name:'zhao',         age:18,         say: function(){             console.log(this);             console.log(this.name);         }     }      obj.say(); // obj                // 'zhao'

函数say()是作为对象obj的方法调用的,this指向obj

    // 对temp赋值     let temp = obj.say;     temp();   // window               // undefined

temp赋值后,虽然和

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信