Javascript 是最初由对象构造函数Fn&;创建的Array.prototype;后来它的构造函数被设置回数组?

Javascript 是最初由对象构造函数Fn&;创建的Array.prototype;后来它的构造函数被设置回数组?,javascript,oop,inheritance,constructor,prototype,Javascript,Oop,Inheritance,Constructor,Prototype,我问这个问题的原因是: Function.prototype.constructor === Function typeof Function.prototype === "function" 从以下三行中,我假设Array.prototype是由对象构造函数创建的: typeof Array.prototype === "object" Array.prototype instanceof === Object Array.prototype.__proto__ === Object.

我问这个问题的原因是:

Function.prototype.constructor === Function
typeof Function.prototype === "function"
从以下三行中,我假设
Array.prototype
是由对象构造函数创建的:

typeof Array.prototype === "object"   
Array.prototype instanceof === Object
Array.prototype.__proto__ === Object.prototype  
然而,为什么下面的不等于Object

Array.prototype.constructor === Array
所以我只能假设它是
数组。prototype
首先由对象构造函数创建,然后将其prototype构造函数设置回数组

如果是这样的话,这背后有什么原因吗?如果没有,它是如何工作的?

来自MDN():


“返回对创建实例原型的对象函数的引用。”因此构造函数是用于构造对象的函数。

Func.prototype.constructor
始终引用
Func
,即
Func.prototype
是其原型对象的函数

它认为你得出了以下结论:因为

typeof Function.prototype === "function"
// and 
Function.prototype.constructor === Function
一定是这样

typeof Array.prototype === "object"
// and
Array.prototype.constructor === Object
但这一结论是错误的。JavaScript中的所有内容都是对象,除了基本值。函数也是对象,但它们是特殊类型的对象,因为它们实现了内部
[[Call]]
属性。由于所有函数都必须实现这个内部方法,所以
Function.prototype
实现它是有意义的

三,。根据表20返回由类型(val)确定的字符串

此表显示:

val类型 结果

对象(本机,不实现[[Call]]) “对象”
对象(本机或主机,并实现[[Call]]) “功能”


非常感谢。我想我现在已经很清楚了。主要的问题仍然是,是什么决定了原型的构造函数值,例如:Array.prototype.constructor===Array,它是否总是构造函数本身?是的。当我回到电脑前,我会提供一个链接。哇,这就是我一直在思考的——代码本身在幕后是如何工作的。有点像“Javascript索引”的“索引”。非常感谢你,菲利克斯。