论 Function和 Object的辩证关系

Object instanceof Function //true

//上述结果的原因:

Object.prototype.constructor;  //function Object(){} <===>     Object.prototype.constructor   ===>   Object.prototype = new Object();

//1. 因为有了new Object()的过程,而这个过程会让其产生的实例维护constructor和__proto__属性,具体的来说,

//一定会维护一个constructor的属性,是否会有__proto__属性需要要看new的过程(除了Global, Function, Object之外的所有过程()都会维护__proto__属性:可能有误)。

Object.prototype.constructor.constructor; //function Function(){}

//2. 任何的函数(包括所有内置对象(除了Global对象)的构造函数)都是由new Function()之后并添加额外的属性和行为之后得到的;

//请务必知道的是var fun = new Funtion();  //typeof fun ===> "function":这起码说明new的过程不一定说明一定产生的是一个object类型的变量。

Object.constructor: //function Function(){}; //上面两个分步骤得到的结果

//3. 因此综上所述,Object是派生自Function的,是由Function构造函数添加额外的行为和属性之后得到的一个类。

Object.prototype.__proto__ ; //null;

//4. 由上面可以知道任何的函数到最后都是通过通过new Object之后赋给相应函数.prototype属性之后作为根节点,也即是原型链的顶端就是Object类;

//在此之所以可以逐步通过.constructor的方式来获取构造函数,是因为一直存在new的过程。因此prototype.constructor和__proto__.constructor都是可以说明继承关系的。

//也即是自定义函数的原型链中,在该函数.prototype和最后一级Object()之间是一直可以通过__proto__来看原型链中的每一个层级的,也可以通过该函数实例对象.__ptoto__

//之后的每一级来查看其原型链中的每一级的。

Function instanceof Object //true

Function.prototype.__proto__; // Object();
Function.prototype.__proto__.constructor; //function Object();
Function.prototype.__proto__.constructor.constructor //function Function();
//1. 上面说明Function.prototype = new Object();可以说明Function的原型链里面有Object的存在。


综上所述:
我们先用Function构造出Object,然后在Function的原型链上嵌套Object,从而形成一个环,请看下图:  







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值