Open fedono opened 4 years ago
参考
new Foo.getName()
中因为没有执行Foo()
这个函数,所以会首先获取静态属性 Foo.getName()
执行
new Foo().getName()
中执行了 Foo()
函数,所以顺序是 (new Foo()).getName()
,那么就是获取原型上的getName()
函数
写出以下的输出结果是什么
要注意的事,第二次中的 A.prototype 进行重写了
function A(){}
A.prototype.x = 10;
let a = new A();
A.prototype = {x: 20, y: 30};
let b = new A();
console.log(a.x);
console.log(a.y);
console.log(b.x);
console.log(b.y);
最后输出是
10
undefined
20
30
这时候打印
console.log(a.__proto__); // A { x: 10 }
console.log(b.__proto__); // { x: 20, y: 30 }
如果不对 prototype 进行重写,也就是如下
function A(){}
A.prototype.x = 10;
let a = new A();
// A.prototype = {x: 20, y: 30};
A.prototype.y = 20;
let b = new A();
console.log(a.x);
console.log(a.y);
console.log(b.x);
console.log(b.y);
这时候打印
console.log(a.__proto__); // A { x: 10, y: 20 }
console.log(b.__proto__); // A { x: 10, y: 20 }
问题