第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
