原型链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