原文地址:http://blog.csdn.net/tom_221x/archive/2010/02/22/5316675.aspx
在javascript中所有的对象都继承自Object原型,而Function又充当了对象的构造器,那么Funtion和Object到底有着什麽样的关系呢 ?
首先,一切都是对象。
- alert(Object instanceof Object);
-
-
由此可见,Object继承自己,Funtion继承自己,Object和Function互相是继承对方,也就是说Object和Function都既是函数也是对象。这一点很特别。所有的函数都是对象,可是并不是所有的对象都是函数。证明如下:
- function foo(){};
- alert(foo instanceof Function);
- alert(foo instanceof Object);
-
alert(new foo() instanceof Function);
我们看到由new + function的构造器实例化出来的对象不是函数,仅仅是Object的子类。接下来,我们会想所有的对象都有一个Function的构造器存储在原型链的constructor属性中,那么Object的构造器是什麽呢? 证明:
- alert(Object.constructor);
- alert(Function.constructor);
由此我们可以确定Object是由Function这个函数为原型的,而Function是由它自己为原型的。Function函数是由native code构成的,我们不用去深究了。存在function Function(){...}的定义,我们明白了Function其实就是函数指针,也看作函数变量。就相当于function foo(){}中的foo。连Object的构造器都是指向Function的,可以想象Function是一个顶级的函数定义,大大的区别于自定义的如function foo(){}这样的函数定义。
看这样一个语句,new Function();以Function为原型来实例化一个对象,按照刚才Object.constructor 为 functon Function(){}来说,new Function()产生的对象应该是一个Object啊,我们来验证一下:
- alert(new Function() instanceof Object);
- alert(Object instanceof new Function());
- alert(typeof new Function());
- alert(typeof Object);
其实new Function();将产生一个匿名函数,由于Function是顶级函数所以可以产生自定义函数,我们可以把所有的函数看作Function的子类。但所有的一切包括函数都是Object的子类这点是不变的,也得到了体现。typeof Object的结果说明Object也是一个函数。继续做实验:
- alert(new Object().constructor);
一个情理之中的疑惑。可以这么说凡是可以放在new后面的都是一个函数构造器,那么Object确实也像其它函数一样,是一个函数的指针或者是函数变量,但Function是顶级的所以Object要由Function来构造。可以这么理解,Function和Object一个是上帝,一个是撒旦同时诞生于宇宙的最开始,拥相当的力量。但是上帝更为光明,所以高高在上。Object要由Function来构造,Function属于顶级函数。但是撒旦并没有绝对的输给上帝,否则上帝就会消灭撒旦。于是或所有的对象都要继承Object包括Function(Object和Function既是对象又是函数)。就相当于所有的人包括上帝都有邪念一样。
拓展一下,由Object我们会想到Array,Number,String等这些内置对象。有理由相信这些都是Object的子类。如下:
- alert(Array instanceof Object)
- alert(String instanceof Object)
- alert(Number instanceof Object)
- alert(Object instanceof Array)
- alert(Object instanceof String)
- alert(Object instanceof Number)
当然他们也都会有Object的特性就像魔鬼和撒旦的关系一样,也是Function的子类,由Function构造。那么有Array,String,Number构造的对像如:new Array();new Number();new String()的构造器是function Array(){...};function String(){...};function Number(){...};
- alert(Array instanceof Function)
- alert(String instanceof Function)
- alert(Number instanceof Function)
- alert(Array.constructor)
- alert(String.constructor)
- alert(Number.constructor)
总结一下,像内置的函数或说对象把如:Object,String,Array等等和自定义的function关键字定义的函数,都是Function的子类。new Function()相当于function关键字定义。这里可以引出,Function.prototype原型链上的属性所有函数共享,Object.prototype原型链上的属性所有对象共享。
分享到:
相关推荐
理解JavascriptFunction与Object
JavaScript中object和Object有什么区别,为什么用typeof检测对象,返回object,而用instanceof 必须要接Object呢 这个问题和我之前遇到的问题非常相似,我认为这里有两个问题需要解决,一个是运算符new的作用机制,...
打开控制台发现报错:object is not a function。 感觉很奇怪,这块的功能最新没动过怎么会突然出问题了呢?上线时主流浏览器都测试过了呀。 虽然奇怪,但是还的解决问题。看着代码发现一个radio对象的name属性和一...
今天我们来尝试理解Function和Object.因为这个里面有些人前期可能会搞糊涂.他们之间到底是什么关系.当然也不除外当初的我. 注意:官方定义: 在Javascript中,每一个函数实际上都是一个函数对象. 我们先来看最简单的...
javascript Object与Function使用.docx
Function instanceof Object 和 Object instanceof Function 都是 true 1。我们可以认为 Object 是一个特殊的“类”,而这里的“类”即:Function 于是便可以理解为: Object = Function () {} 或 Object = new ...
主要简单介绍了Javascript中的Function与Object的关系,并附上示例分析,对于我们更好的理解Javascript中的Function与Object的关系很有帮助,有需要的小伙伴参考下。
在学习过传统的面向对象语言后,如 java c++,转学 javascript 却有点不适应,特别是 javascript 中所谓的 object(对象) function(函数),有时候会被搞晕。于是乎简单整理了下面的一些概念性的东西,方便学习和...
如下所示: 代码如下: var person = new Object(); person.name = “Nicholas”; person.age = “29” person.job = “Software Engineer”; person.sayName = function () { alert(this.name); }; person....
1.Object对象 原型对象 原型是对象的一个属性,也就是prototype属性,每个对象都有这个内部属性,而且他本身也是一个对象。 [removed] Object.prototype.num= 10; alert("添加原型对象属性:"+ Object....
阅读目录 Object类型 1、通过构造函数来创建 2、通过字面量表示法来创建对象 Array类型 同样Array也有两种创建方式: ...我们在《一步步学习javascript基础篇(1):基本概念》中简单的介绍了五种基本数据类型Undef
话说在楼猪理解和实践能力尚欠火候的时候,在这篇里曾经照搬了李战老师不少东西写在自己的博客...下面楼猪就通过自己写的几段简单代码,论证一下javascript内置Object和Function的关系。 1、Function就是Object,Object
本文着重解释一个比较常见但是非常容易使开发人员或者是初学JavaScript的人非常混淆的问题,那就是两个核心构造函数Object和Function,他们之间到底有什么关系?为何instanceof运算符的返回结果会让你感到混淆?本文...
oriented programingpowerful aspects of function expressionsBrowser Object Model allowing interaction with the browser itselfdetecting the client and its capabilitiesDocument Object Model (DOM) objects...