javascript - Object和Function的原型链问题

查看:68
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆