美文网首页1000天日更计划
Day34:this绑定优先级

Day34:this绑定优先级

作者: 钱塘风华 | 来源:发表于2019-04-27 23:19 被阅读1次

    【书名】:你不知道的JavaScript(上卷)

    【作者】:Kyle Simpson

    【本书总页码】:213

    【已读页码】:110

    1. 隐式绑定和显式绑定优先级比较

    可以看到,显式绑定优先级更高,也就是说在判断时应当先考虑是否可以应用显式绑定。

    再来看一下,new 绑定和隐式绑定

    new 绑定比隐式绑定优先级高,那么 new 绑定和显式绑定谁的优先级更高呢?

    new 和 call/apply 无法一起使用,因此无法通过 new foo.call(obj1) 来直接进行测试。但是可以使用硬绑定来测试它俩的优先级。

    bar 被硬绑定到 obj1 上,new bar(3) 并没有将obj1.a修改为3。new 只是修改了硬绑定(到 obj1 的)调用 bar(..) 中的 this。因为使用了new 绑定,我们得到了一个名字为 baz 的新对象,并且 baz.a 的值是 3。

    现在可以按照下面的顺序来进行this绑定的判断:

    1. 函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象。

        var bar = new foo()

    2. 函数是否通过call、apply(显式绑定)或者硬绑定调用?如果是的话,this绑定的是指定的对象。

        var bar = foo.call(obj2)

    3. 函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this 绑定的是那个上下文对象。

        var bar = obj1.foo()

    4. 如果都不是的话,使用默认绑定。如果在严格模式下,就绑定到undefined,否则绑定到全局对象。

        var bar = foo()

    相关文章

      网友评论

        本文标题:Day34:this绑定优先级

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