第65题 原型调用面试题 说出结果并说出 why

    function Foo() {
      Foo.a = function () {
        console.log(1);
      };
      this.a = function () {
        console.log(2);
      };
    }
    
    Foo.prototype.a = function () {
      console.log(4);
    };
    
    Function.prototype.a = function () {
      console.log(3);
    };
    
    
    Foo.a();
    
    let obj = new Foo();
    obj.a();
    Foo.a();

执行结果:

  • 执行Foo.a()Foo本身目前并没有a这个值 ,就会通过 __proto__ 进行查找, 所以输出是 3
  • new 实例化了 Foo 生成对象 obj ,然后调用 obj.a() ,但是在Foo函数内部给这个obj对象附上了a函数。 所以结果是2。 如果在内部没有给这个对象赋值a的话,就会去到原型链查找a函数,就会打印4.
  • 执行Foo.a() , 在上一步中Foo函数执行,内部给Foo本身赋值函数a ,所以这次就打印1
Last Updated:
Contributors: leeguooooo