JS中this指向

作者: LemonnYan | 来源:发表于2019-07-22 10:22 被阅读5次

    函数有4种调用方式,对应就有4种绑定规则:默认绑定、隐式绑定、硬绑定和构造函数绑定。

    1、默认绑定

    当作为普通函数被调用时,就会发生默认绑定,this指向全局对象。在严格模式中,this的值会变为undefined。

    function func1(){
      console.log(this);  //this
    }
    func1();
    
    function func2(){
      "use strict";
      console.log(this);  //undefined
    }
    func2();
    

    2、隐式绑定

    当作为对象方法被调用时,就会发生隐式绑定,this指向调用该方法的对象。

    var obj={
      name:"lemon",
      getName:function(){
        console.log(this.name);  //lemon
      }
    }
    obj.getName();
    

    3、硬绑定

    当调用函数的方法apply()、call()或bind()时,就能指定this要绑定的对象。如果传入null或undefined,会被替换为全局对象(window);如果传入其它原始值(数字、字符串或布尔值),会被自动转化为对应的包装对象(Number、String或Boolean)。

    var obj={
      name:"lemon",
      getName:function(){
       return this.name;
      },
      getThis:function(){
       return this;
      }
    };
    
    var name="freedom";
    obj.getName.apply(null);  //"freedom"
    obj.getName.apply(undefined);  //"freedom"
    obj.getName.apply(true);   //new Boolean(true);
    

    4、构造函数绑定

    当用new运算符调用构造函数时,会创建一个新对象,构造函数中的this会与这个新对象绑定在一起。

    var name="freedom";
    function func(){
      this.name="lemon";
      this.getName=function(){
       return this.name;
      };
    };
    
    var obj=new func();
    obj.getName();   //"lemon"
    

    相关文章

      网友评论

        本文标题:JS中this指向

        本文链接:https://www.haomeiwen.com/subject/rtlilctx.html