您的位置:首页 > 移动开发 > Objective-C

论 Function和 Object的辩证关系

2016-06-30 10:22 471 查看

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,从而形成一个环,请看下图:

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JS Function Object