美文网首页
this详解

this详解

作者: Ivy_study | 来源:发表于2019-02-28 15:17 被阅读0次

    强调点:

    this在任何情况下都不指向函数的词法作用域;
    this的指向是在函数调用时确定的而不是在函数声明时确定的

    this绑定规则(优先级由低到高)

    1、默认绑定

    函数调用类型: 独立函数调用

    function foo() {
      console.log(this);
    }
    
    foo(); // global window...
    
    2、隐式绑定

    函数调用类型:obj.foo()

    function foo() {
      console.log(this);
    }
    
    var obj = {
      foo: foo
    }
    
    obj.foo();
    

    但是在隐式绑定中存在着隐式丢失绑定对象的情况

    一种情况 
    function foo() {console.log(this);}
     var obj = {foo: foo}
     var bar = obj.foo // 函数别名
     bar()  //调用位置在全局作用域下,为默认绑定 
    
    另一种情况:函数作为参数传入时
    function foo() {console.log(this);}
    function doFoo(fn) {
      // fn其实引用的是foo
      fn(); // <--调用位置
    }
    var obj ={foo: foo}
    doFoo(obj.foo);
    
    3、显式绑定

    call、apply、bind

    4、new 绑定
    var p = new Person();
    
    var obj = {};   // 创建一个全新的对象
    obj.__proto__ = Person.prototype;  // 这个新对象会被执行[[prototype]]连接
    Person.call(obj);  // 这个新对象会绑定到函数的this
    return obj; // 返回这个新对象
    
    es6箭头函数中的this值不能被绑定,只属于外层(函数或全局)作用域

    相关文章

      网友评论

          本文标题:this详解

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