先有对象还是先有函数,鸡生蛋、蛋生鸡的问题。有关js里内置对象Function和Object的思考

js里创建的函数本身作为一个实例对象都是由内置对象Function作为构造函数创造出来的,所谓var f = funciton(a){b}即等同于f = new Function(a,b)。

同时js里Object也是一个构造函数,因此他也是Function加工出来的。

Function作为一个对象实例,也是Function加工出来的,具有自原性。

但Function的加工原料,也就是原型链的父原型是Object,即Object可以通过Function变成Function。

那么是什么通过Function的加工变成了Object呢?

这就是最原始的那个静态种子,答案就是Object.prototype,在控制台里打印出来是:

  1. {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
    1. constructor: ƒ Object()
    2. hasOwnProperty: ƒ hasOwnProperty()
    3. isPrototypeOf: ƒ isPrototypeOf()
    4. propertyIsEnumerable: ƒ propertyIsEnumerable()
    5. toLocaleString: ƒ toLocaleString()
    6. toString: ƒ toString()
    7. valueOf: ƒ valueOf()
    8. __defineGetter__: ƒ __defineGetter__()
    9. __defineSetter__: ƒ __defineSetter__()
    10. __lookupGetter__: ƒ __lookupGetter__()
    11. __lookupSetter__: ƒ __lookupSetter__()
    12. get __proto__: ƒ __proto__()
    13. set __proto__: ƒ __proto__()

而Object.prototype.__proto__==null

Object.prototype.constructor==Object()

那么这就可以这样来梳理了,null作为原料通过Object函数构造出了Object.prototype,

Object.prototype作为原料通过Function函数构造出了Object,

Object作为原料通过Function函数构造出了Function本身。

完美解决了,对吧!

null是什么呢?和数字符字面常量,字符串字符常量,true,false,undefine一起作为js的基本类型,再加上那些运算符等符号就可以看作是开天辟地的真正基础了。而这些基础为什么不是对象呢?不是js里万物皆对象吗?

对于js的创造者来说,仅仅是利用一些相等搭了一个圈,但沉浸在这个世界的人们就永远也看不到其中事物的本源了。

这大概和鸡生蛋还是蛋生鸡这样的哲学本源问题是一致的,就像无论唯心还是唯物,在 西部世界 里所追寻的那个迷宫的核心究竟如何,只要还在其中,就是永远没有答案的。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值