this

作者: yyyzhen | 来源:发表于2017-09-30 16:57 被阅读0次

    概念

    当一个函数被调用时,会创建一个活动记录(有时也称为执行上下文)。这个记录会包含函数在哪里被调用(调用栈)、函数的调用方式、传入的参数等信息。this就是这个记录的一个属性,会在函数执行的过程中用到

    this的四条调用规则:
    • 默认绑定:在严格模式下绑定到undefined,否则绑定到全局对象
    var a = 1
    function foo() {
      console.log(this.a)
    }
    foo()  // 1
    

    上例中,函数调用时应用了this的默认绑定,因此this指向全局变量。

    • 隐式绑定:由上下文对象调用?绑定到那个上下文对象。
    var a = 3
    function foo() {
      console.log(this.a)
    }
    var obj = {
      a: 2,
      fn: foo
    }
    obj.fn()  // 2
    

    上例中,函数foo在被调用时,调用位置会用obj的上下文来引用函数,当函数拥有上下文对象时,隐式绑定规则会把函数调用中的this绑定到这个上下文对象,因此,this指向obj。

    • 显式绑定:由call或者apply(或者bind)调用?绑定到指定的对象。
    var a = 2
    function foo() {
      console.log(this.a)
    }
    var obj = {
      a: 3
    }
    
    foo.call(obj)  \\ 3
    

    上例中,通过foo.call(...),我们在调用foo时强制把它的this绑定到obj上。

    • new调用:由new调用?绑定到新创建的对象。
    function Foo() {
      console.log(this)
    }
    var fn = new Foo()  // Object{constructor: Foo}
    

    上例中,使用new来调用Foo(...)时,我们会构造一个新对象并把它绑定到Foo(...)调用中的this上

    this四条规则的优先级:

    new调用 > 显式调用 > 隐式调用 > 默认绑定

    相关文章

      网友评论

          本文标题:this

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