首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Object.constructor===Object.constructor.constructor //为什么?

Object.constructor===Object.constructor.constructor //为什么?
EN

Stack Overflow用户
提问于 2011-05-11 11:34:33
回答 2查看 2.1K关注 0票数 5

这里https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function函数对象实例的构造函数属性“指定创建对象原型的函数”。这让人困惑,所以Object.constructor是“创建对象原型的函数”吗?“对象”到底是什么?

我试图理解为什么Object.Constructor的构造函数属性本身就是?

因此: Object.constructor===Object.constructor.constructor //为什么?

编辑:我觉得T.J.克劳德的回答很好,但他的话措辞很模糊(至少对我来说,一开始就很难理解)。以下是改写后的答案:

1) 对象函数的一个实例。

2) Object.constructor,对象没有一个名为构造函数的属性,所以当我们调用时,它实际上给了我们Object.[prototype].constructor (又名Object.__proto__.constructor). )

3) Object.constructor (又名Object.__proto__.constructor) )是函数的一个实例。

4)由于Object.constructor和对象(又名Object.__proto__.constructor) )都是函数的实例,因此它们都具有引用同一个对象的__proto__属性。换句话说,Object.__proto__ === Object.constructor.__proto__ (又名Object.__proto__.constructor._proto_) )

5)线Object.constructor===Object.constructor.constructor实际上等于Object.__proto__.constructor===Object.constructor.__proto__.constructor行

6)结合步骤4和步骤5给我们Object.constructor===Object.constructor.constructor

7)去第4步)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-11 11:38:49

因为Object是一个Function,而Function构造函数是一个Function,所以它的构造函数本身。

“对象”是面向对象编程的基本组成部分。Object,在JavaScript中,是一个构造函数(如DateRegExp)。它的工作是通过new关键字初始化解释器创建的对象的新实例。

这可能是非主题的,也可能不是,因为您询问的是构造函数:

JavaScript中的任何函数都可以是构造函数;这完全取决于您如何使用它。考虑:

代码语言:javascript
复制
function Foo() {
}

如果我这么叫:

代码语言:javascript
复制
var f = Foo();

.它只是一个无聊的旧函数,f接收undefined (因为Foo什么都不返回)。但如果我这么说的话

代码语言:javascript
复制
var f = new Foo();

.我用它作为构造函数,更有趣的事情发生了:

解释器创建一个新的空白对象。解释器将新对象的底层原型设置为Foo.prototype.

  • The解释器调用Foo,使this引用新对象。当Foo完成时,如果Foo不返回值(或不返回对象),则new表达式的结果是在步骤1中创建的对象。(如果Foo返回对象,则使用该对象;这是大多数人不需要做的高级事情。)
票数 5
EN

Stack Overflow用户

发布于 2011-05-11 11:47:08

JavaScript对象布局

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

https://stackoverflow.com/questions/5963547

复制
相关文章

相似问题

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