为什么更改原型不会影响以前创建的对象?

Ada*_*der 6 javascript prototype

我有以下代码:

var A = function() {};
var a = new A();
var b = new A();
A.prototype.member1 = 10;

A.prototype = {}
var c = new A();
console.log(a.member1);
console.log(a.constructor === b.constructor);
console.log(a.constructor === c.constructor);
console.log('---------');
console.log(c.member1);
Run Code Online (Sandbox Code Playgroud)

它的输出是:

10
true
false
---------
undefined
undefined
Run Code Online (Sandbox Code Playgroud)

原型ab没有改变,并c有一个新的.我是对的,这是因为a.constructor不相等c.constructor而且每个人都有自己的事实prototype?当两个物体的构造者可能不相等时,还有其他的东西吗?

额外的问题:为什么印有两个undefined字符串?(铬)

Imp*_*Imp 5

在你打电话的时候

var a = new A();
Run Code Online (Sandbox Code Playgroud)

基本上这个任务完成了:

a.__proto__ = A.prototype;
Run Code Online (Sandbox Code Playgroud)

然后你重新分配A.prototype给一个新对象,所以c得到{}它的原型.

A.prototype = {};
var c = new A();
Run Code Online (Sandbox Code Playgroud)

但是,这并不会破坏旧A.prototype对象 - a.__proto__仍然指向它.

我是对的,这是因为a.constructor不等于c.constructor并且每个都有自己的原型吗?

.constructor基本上只是一个便利的财产.它对实例的行为没有影响.

额外的问题:为什么印有两个未定义的字符串?

不在我的控制台,他们没有!(歌剧12)