为什么 `Object.__proto__===Array.__proto__===Function.__proto__`
发布于 8 年前 作者 leavesdrift 7569 次预览 最后一次回复是 8 年前 来自 问答
一直以来我都是认为只有类的实例才有__proto__属性,只有函数才有prototype属性,但是
突然看到一个东西是:
Function.prototype === Object.__proto__
Function.prototype === Array.__proto__
Function.prototype === Function.__proto__
而
Function.prototype === Function.__proto__
一下就懵逼了,到底 Function 扮演着什么样的角色(和Object, Array的关系),为什么Object,Array非类的实例也具有__proto__属性,又为什么Function.prototype ,Function.__proto__会指向同一块内存呢?
10 回复
Function是所有函数的构造函数Object,Array是函数 + 函数是对象 ==>Object,Array是对象,对象有原型 (__proto__属性 )Function.prototype === Object.__proto__Function.prototype === Array.__proto__Function也是个函数… ==>Function.prototype === Function.__proto__最后补充一点:
typeof Function.prototype==>functionJs的世界万物皆对象,知道这个问题就迎刃而解了
万物皆对象那是ruby。 js里,数字还有字符串这些基本类型就不是对象。
在 js 原型链里,最底层是继承至 Object。
From PWA CNode
@jokerapi 数字和字符串 这些 primitive values 在需要时是会被包裹成 Number, String 对象的。
关系就是: Function 是所有函数的构造函数,所以也是所有构造函数的构造函数,因为所有构造函数都是函数。哈哈哈。
@ianchn 可以的,666
@DevinXian 再来一段 js 绕口令,
window.window.window.window.window.window === window, 233https://zhuanlan.zhihu.com/p/22989691
@waitingsong好文啊,谢谢