Object构造函数是由哪个构造函数创建的?
Object构造函数的原型指向问题解答
首先先澄清一个概念误区:你提到的「Object的原型为Object.prototype」是混淆了两个不同的原型相关属性:
Object.prototype是Object作为构造函数的prototype属性,它的作用是作为所有new Object()生成的普通对象的原型- 而
Object本身本质是一个函数实例,它作为对象的内部原型(也就是__proto__指向的内容)是另一套逻辑
接下来直接回答你的两个问题:
你输出
Object._proto_看到的构造函数就是Function,这确实意味着Object是由Function构造出来的
所有JS内置构造函数(Object、Array、String等)本质都是函数,而所有函数都是Function的实例,按照原型链规则,对象的__proto__指向创建它的构造函数的prototype属性,所以Object.__proto__ === Function.prototype,你可以在控制台直接运行这段代码验证,返回结果为true。Object具备普通函数的属性,正是因为它继承了Function.prototype上的方法
你看到的bind、call、arguments等属性,本身就是定义在Function.prototype上的内置成员,所有函数实例都会继承这些属性,Object作为Function的实例自然也能访问到这些方法。
补充一个原型链的特殊规则:
Function本身也是函数,所以Function.__proto__ === Function.prototype同样成立,这是JS为了闭环原型链设置的内置规则。
内容的提问来源于stack exchange,提问作者Denkhis
相关产品推荐
相关产品推荐

