zoukankan      html  css  js  c++  java
  • 你不知道的JS系列 ( 23 ) - this 绑定优先级

    我们首先来看下隐式绑定和显示绑定哪个优先级更高
    function foo(){
      console.log(this.a)
    }
    var obj1 = {
      a: 2,
      foo: foo
    }
    var obj2 = {
      a: 3,
      foo: foo
    }
    
    obj1.foo(); // 2
    obj2.foo(); // 3
    
    obj1.foo.call(obj2); // 3
    obj2.foo.call(obj1); // 2

    这个例子可以看到,显示绑定优先级比隐式绑定更高。



    现在我们需要搞清楚 new 绑定和隐式绑定的优先级谁高
    function foo(something) {
      this.a = something
    }
    var obj1 = {
      foo: foo
    }
    var obj2 = {
    }
    
    obj1.foo(2);
    console.log(obj1.a); // 2
    
    obj1.foo.call(obj2, 3);
    console.log(obj2.a); // 3
    
    var bar = new obj1.foo(4);
    console.log(obj1.a); // 2
    console.log(bar.a); //4

    这个例子可以看出 new 绑定比隐式绑定优先高,但是 new 绑定和显示绑定谁的优先级高呢?



    new 和 apply/call 无法一起使用。但是隐式绑定中有 Funciton.prototype.bind();
    function foo(something) {
      this.a = something
    }
    var obj1 = {
    }
    
    var bar = foo.bind(obj1);
    bar(2);
    console.log(obj1.a); //2
    
    var baz = new bar(3);
    console.log(obj1.a); // 2
    console.log(baz.a); // 3

    new 修改了硬绑定调用 bar() 中的 this

    总结:new > 显示绑定 > 隐式绑定 > 默认绑定
  • 相关阅读:
    Finding Lines
    2020-3-3 牛客试题复盘
    2020-3-2 牛客试题复盘
    2020-02-29(观看视频笔记)
    2020-02-29(观看视频笔记)
    2020-02-29(观看视频笔记)
    2020-02-28(观看视频笔记)
    2020-02-27(观看视频笔记)
    2020-2-27 牛客试题复盘
    2020-02-26(观看视频笔记)
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12440934.html
Copyright © 2011-2022 走看看