首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Javascript中的构造函数不能作为它们的原型呢?

为什么Javascript中的构造函数不能作为它们的原型呢?
EN

Stack Overflow用户
提问于 2020-03-31 16:24:26
回答 1查看 68关注 0票数 0

我正在学习Javascript,最近我学到了一些关于原型的知识。我对原型的理解是,它们实际上是内存中的对象,每个新创建的对象都有一个指针。创建新对象时,用于创建该对象的构造函数将新创建的对象的原型指定为构造函数的原型。换句话说,如果我有一个圆圈构造函数,并且我创建了一个新的循环对象,那么这个新对象和圆圈构造函数都指向相同的引用。

我的问题是:如果原型应该引用创建对象的“父”对象,例如构造函数函数,为什么构造函数函数(即函数和对象)不指向“函数”构造函数作为它们的原型?如果您尝试创建像这样的新构造函数:

代码语言:javascript
复制
function Circle() {}
let c1 = new Circle();

您将看到c1的原型如下所示,这是有意义的,因为圆圈构造器创建了它

代码语言:javascript
复制
Circle {}
__proto__:
constructor: ƒ Circle()
__proto__: Object

Circle.prototype和上面的对象是相同的。那么,为什么Circle.prototype不把Function作为一个原型呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 16:37:59

正如您所观察到的,下面是true

代码语言:javascript
复制
Object.getPrototypeOf(c1) === Circle.prototype

因此,从逻辑上讲,如果我们认为CircleFunction的一个实例,那么:

代码语言:javascript
复制
Object.getPrototypeOf(Circle) === Function.prototype

您可以在下面确认这一点:

代码语言:javascript
复制
// let Circle = new Function(); /* also works here */
function Circle() {}
let c1 = new Circle();

console.log(Object.getPrototypeOf(c1) === Circle.prototype);
console.log(Object.getPrototypeOf(Circle) === Function.prototype);

Object.getPrototypeOf()方法返回指定对象的原型(即内部[[Prototype]]属性的值)。

这不应与Circle.prototype混淆。您可以在MDN关于对象原型的文章中更多地了解它们之间的区别,也可以随意浏览VS.JavaScript中的原型的任何答案。

请注意,Circle.__proto__Object.getPrototypeOf(Circle)是等价的,但是__proto__是不标准的(尽管由于历史上对向后兼容性的使用,几乎每个JavaScript实现都定义了它)。

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

https://stackoverflow.com/questions/60955277

复制
相关文章

相似问题

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