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索引”的“索引”。非常感谢你,菲利克斯。