JavaScript 如何维护原型引用?

How does JavaScript maintain the prototype reference?

查看(How does the prototype chain work?)的答案,我可以看到有一个继承链。幕后发生了什么?

据我所知,原型 属性 存储了对原型对象的引用?为什么该对象不包含原型的原型以及它如何维护该引用?

var Parent = function() {
 this.name = 'Parent';
}

Parent.prototype.sayHi = function() {
 console.log('hi');
}

var Child = function() {
 this.name = "Child";
}

Child.prototype = new Parent();

console.log(Parent.prototype); // { sayHi: [Function] }
console.log(Child.prototype); // { name: 'Parent' }
console.log(Child.prototype.prototype); // undefined

===============下面的回答===============

console.log(Parent.prototype); // { sayHi: [Function] }
console.log(Child.prototype); // { name: 'Parent' }
console.log(Child.prototype.__proto__); // { sayHi: [Function] }

Why does that object not include the prototype's prototype and how is it maintaining that reference instead?

因为在您的示例中,Childprototype 也是 Parent 的实例,而不是另一个构造函数。 prototype 是构造函数的 属性,而不是每个单独实例的 属性。

还有另一个 属性 为每个实例执行此操作,即 __proto__ 属性,但它几乎没有正常用途。 ES6 规范也只要求该功能在网络浏览器中实现,而不一定是其他 JavaScript 环境。