论 Function和 Object的辩证关系

来源:互联网 发布:js offsetwidth 属性 编辑:程序博客网 时间:2024/05/21 20:29

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