我正在研究Mozilla对原型继承https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain的解释。想在镀铬控制台里尝试一下。
function f() {
this.a =1;
this.b =2;
}
let o = new f();
f.prototype.b =3;
f.prototype.c =4;我注意到函数f()的原型有一个构造函数,并且仍然有一个原型,它一直在进行,如下所示: f.prototype.constructor.prototype.constructor.prototype.constructor.prototype.constructor.prototype.constructor

现在,根据mozilla文档,“每个对象都有一个私有属性,它持有一个指向另一个称为它原型的对象的链接。这个原型对象有自己的原型,等等,直到一个对象以null作为它的原型。根据定义,null没有原型,并且充当这个原型链中的最后一个链接”。
我相信我是从一个错误的角度看它。有人能在这里放点视角吗。到底是怎么回事?为什么我们有一个永无止境的构造函数和原型链?
发布于 2020-12-14 04:06:26
你有一个循环推荐信。给定一个函数,您可以访问它的prototype属性来访问对象,该对象将是任何实例的内部原型。
function f() {
this.a =1;
this.b =2;
}
let o = new f();
console.log(f.prototype === Object.getPrototypeOf(o));
在这个.prototype对象上,您可以访问它的constructor属性以返回到相关的函数。
函数的.prototype和原型的.constructor是相互链接的。无论哪种情况,你都可以访问另一个。
f的实际原型链是:
f <- Function.prototype <- Object.prototypeo的原型链是:
o <- f.prototype <- Object.prototype请注意,.prototype属性没有引用对象,这是您要调用它的对象的内部原型。要获得某个对象obj的内部原型,您必须使用Object.getPrototypeOf (或__proto__,这是不推荐的)。.prototype属性是函数的一个特殊属性,它将引用可能创建的该函数的任何实例的内部原型。例如,const instance = new SomeClass()将导致instance拥有SomeClass.prototype的内部原型。
https://stackoverflow.com/questions/65283429
复制相似问题