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?
因为在您的示例中,Child
的 prototype
也是 Parent
的实例,而不是另一个构造函数。 prototype
是构造函数的 属性,而不是每个单独实例的 属性。
还有另一个 属性 为每个实例执行此操作,即 __proto__
属性,但它几乎没有正常用途。 ES6 规范也只要求该功能在网络浏览器中实现,而不一定是其他 JavaScript 环境。
查看(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?
因为在您的示例中,Child
的 prototype
也是 Parent
的实例,而不是另一个构造函数。 prototype
是构造函数的 属性,而不是每个单独实例的 属性。
还有另一个 属性 为每个实例执行此操作,即 __proto__
属性,但它几乎没有正常用途。 ES6 规范也只要求该功能在网络浏览器中实现,而不一定是其他 JavaScript 环境。