首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型构造器链有多长?

原型构造器链有多长?
EN

Stack Overflow用户
提问于 2020-12-14 04:02:30
回答 1查看 51关注 0票数 0

我正在研究Mozilla对原型继承https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain的解释。想在镀铬控制台里尝试一下。

代码语言:javascript
复制
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没有原型,并且充当这个原型链中的最后一个链接”。

我相信我是从一个错误的角度看它。有人能在这里放点视角吗。到底是怎么回事?为什么我们有一个永无止境的构造函数和原型链?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-14 04:06:26

你有一个循环推荐信。给定一个函数,您可以访问它的prototype属性来访问对象,该对象将是任何实例的内部原型。

代码语言:javascript
复制
function f() {
  this.a =1; 
  this.b =2;  
}
let o = new f();

console.log(f.prototype === Object.getPrototypeOf(o));

在这个.prototype对象上,您可以访问它的constructor属性以返回到相关的函数。

函数的.prototype和原型的.constructor是相互链接的。无论哪种情况,你都可以访问另一个。

f的实际原型链是:

代码语言:javascript
复制
f <- Function.prototype <- Object.prototype

o的原型链是:

代码语言:javascript
复制
o <- f.prototype <- Object.prototype

请注意,.prototype属性没有引用对象,这是您要调用它的对象的内部原型。要获得某个对象obj的内部原型,您必须使用Object.getPrototypeOf (或__proto__,这是不推荐的)。.prototype属性是函数的一个特殊属性,它将引用可能创建的该函数的任何实例的内部原型。例如,const instance = new SomeClass()将导致instance拥有SomeClass.prototype的内部原型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65283429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档