原型链1 求代码结果

function Foo() {
  Foo.getValue = function() {
    console.log(1);
  }
  this.getValue = function() {
    console.log(2);
  }
}

Foo.prototype.getValue = function() {
  console.log(3)
}
Foo.getValue = function() {
  console.log(4)
}
Foo.getValue(); //先查找Foo 的getValue 有定义所以直接输出 4

let obj = new Foo(); // 新建一个obj对象 Foo构造函数中覆盖了Foo.getValue 以及 给obj定义了getValue方法
obj.getValue(); // 输出2
Foo.getValue(); // 构造函数覆盖了getValue 所以输出1

function Foo2() {}
Foo2.getValue = function() {
  console.log(5);
}
Foo2.prototype = Object.create(Foo.prototype); // Foo2 继承Foo
const obj2 = new Foo2();
obj2.getValue(); // 先查Foo2的getValue 没有向上查Foo的原型 输出 3


function Parent(){
    this.a = 'Parent';
}

function Test() {
    this.a = 'Test'
}

Function.prototype.print = function(){
    console.log(this.a);
}

Parent.print()   // 先找Parent的print 没有 向上找原型Function的print 输出a a是undefined

Test.print();   // 同Test 先找Test的print 没有 向上找原型Function的print 输出a a是undefined

var p = new Parent();
p.print();  // 先找p的print 没有 找p的原型P

07-30 04:09