论 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,从而形成一个环,请看下图:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android Native 绘图方法
- Extjs4.0 最新最全视频教程
- Javascript中toFixed方法的改进
- 5个常见可用性错误和解决方案
- js数组实现图片轮播
- js可突破windows弹退效果代码
- JSP脚本漏洞面面观
- 使用BAT一句话命令实现快速合并JS、CSS
- js显示当前星期的起止日期的脚本
- 爆炸式的JS圆形浮动菜单特效代码
- c# 所有类型都从Object类型派生
- js select常用操作控制代码
- JS实现不使用图片仿Windows右键菜单效果代码
- 从jsp发送动态图像
- 原生js结合html5制作小飞龙的简易跳球
- js 页面模块自由拖动实例
- js实现小鱼吐泡泡在页面游动特效
- js 提交和设置表单的值
- PHP VBS JS 函数 对照表