javascript - Object和Function的原型链问题
问题描述
上面是我在浏览器中的测试,懵逼了,这种原型链完全看不懂。谁能帮忙解释一下
Object 是一个函数,不要被它的名字误导了,所以先脑中补完这个形式
function Object () {
...
}
任何函数(构造函数)都有原型,也就是prototype,prototype没什么特别的,就是一个对象。
Object.prototype 输出 Object { ... }", 不要被这个输出误导,以为Object.prototype是它自己。输出里的Object只是说Object.prototype的值是一个Object类型的对象。
但同时因为JS里function本身也是对象,所以Object除了是函数,也是对象。所有的对象都是根据某个原型构造(初始化)而来的.
Object作为对象是什么时候构造的?
答:当它被定义的时候,也就是:
function Object() {
...
}
这时JS运行时就依据 function () { [Native code] } 为原型构造了Object这个函数对象(实例)。
这个 function () { [Native code] } 是什么?它是JS里所有函数的祖宗。
Object.__proto__.__proto__ 即这个祖宗函数的原型,既然是祖宗怎么会有原型?记住它是函数的祖宗,但它不是对象的祖宗,对象的祖宗,就是这个 Object {__defineGetter__: ...}" 。
你又问,既然对象都是构造而来的,那祖宗对象也应该是构造而来的吧?祖宗对象是万物起源,它是JS的语言设计者定义的,是概念体系的出发点。
可是我看到
Object.prototype.constructor
function Object() { [native code] }
祖宗对象不明明是构造而来的?而且是由Object构造而来的?
这只不过是JS的语言设计者为了概念一致,把祖宗对象的constructor指向了Object而已。
祖宗对象之前是什么呢?
Object.prototype.__proto__
null
道生一,一生二。
道是无。
itlr.cc
这篇关于javascript - Object和Function的原型链问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!