这里陈述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 时,它实际上为我们提供了对象。[[prototype]]。constructor (又名对象.__ proto __。构造函数)。
3) Object.constructor (又名对象.__ proto __。构造函数)是函数
4)因为对象和 Object.constructor (又名对象.__ proto __。构造函数)是功能的实例,因此它们都具有引用同一对象的 __ proto __ 属性。换句话说, Object .__ proto __ === Object.constructor .__ proto __ (又名 Object .__ 原 __。构造._ 原 _ )
5) Object.constructor === Object.constructor.constructor 行实际上等于对象.__ proto __。构造函数== = Object.constructor .__ 原 __。构造
6)结合步骤4和5给我们 Object.constructor === Object.constructor.constructor
7)转到步骤4)
答案 0 :(得分:5)
JavaScript对象布局
答案 1 :(得分:4)
由于Object
是Function
,而Function
构造函数是Function
,因此其构造函数本身就是。
“对象”是面向对象编程的基本构建块。在JavaScript中,Object
是一个构造函数(如Date
或RegExp
)。它的工作是通过new
关键字初始化解释器创建的对象的新实例。
这可能是偏离主题的,或者不是,因为你问的是构造函数:
JavaScript中的任何函数都可以是构造函数;这纯粹是你如何使用它的问题。考虑:
function Foo() {
}
如果我这样称呼:
var f = Foo();
...这只是一个无聊的旧功能,f
收到undefined
(因为Foo
不会返回任何内容)。但如果我这样称呼它:
var f = new Foo();
...我正在将它用作构造函数函数,并且会发生更有趣的事情:
Foo.prototype
。Foo
引用新对象的方式调用this
。Foo
完成时,如果Foo
未返回值(或未返回对象),则new
表达式的结果是在步骤1中创建的对象。(如果Foo
返回一个对象,则使用该对象;这是大多数人不必做的高级操作。)