`

(转)javascript中的Function和Object

阅读更多

原文地址:http://blog.csdn.net/tom_221x/archive/2010/02/22/5316675.aspx

在javascript中所有的对象都继承自Object原型,而Function又充当了对象的构造器,那么Funtion和Object到底有着什麽样的关系呢 ?

首先,一切都是对象。

  1. alert(Object instanceof Object); // true
  2. alert(Function instanceof Object);// true
  3. alert(Object instanceof Function);// true
  4. alert(Function instanceof Function);// true

由此可见,Object继承自己,Funtion继承自己,Object和Function互相是继承对方,也就是说Object和Function都既是函数也是对象。这一点很特别。所有的函数都是对象,可是并不是所有的对象都是函数。证明如下:

  1. function foo(){};
  2. alert(foo instanceof Function); // true
  3. alert(foo instanceof Object); // true
  4. alert(new foo() instanceof Function); // false

我们看到由new + function的构造器实例化出来的对象不是函数,仅仅是Object的子类。接下来,我们会想所有的对象都有一个Function的构造器存储在原型链的constructor属性中,那么Object的构造器是什麽呢? 证明:

  1. alert(Object.constructor); // function Function(){ [native code] }
  2. alert(Function.constructor); // function Function(){ [native code] }

由此我们可以确定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啊,我们来验证一下:

  1. alert(new Function() instanceof Object); // true
  2. alert(Object instanceof new Function());// false
  3. alert(typeof new Function());// function
  4. alert(typeof Object);// function  

其实new Function();将产生一个匿名函数,由于Function是顶级函数所以可以产生自定义函数,我们可以把所有的函数看作Function的子类。但所有的一切包括函数都是Object的子类这点是不变的,也得到了体现。typeof Object的结果说明Object也是一个函数。继续做实验:

  1. alert(new Object().constructor); // function Object(){ [native code] }
一个情理之中的疑惑。可以这么说凡是可以放在new后面的都是一个函数构造器,那么Object确实也像其它函数一样,是一个函数的指针或者是函数变量,但Function是顶级的所以Object要由Function来构造。可以这么理解,Function和Object一个是上帝,一个是撒旦同时诞生于宇宙的最开始,拥相当的力量。但是上帝更为光明,所以高高在上。Object要由Function来构造,Function属于顶级函数。但是撒旦并没有绝对的输给上帝,否则上帝就会消灭撒旦。于是或所有的对象都要继承Object包括Function(Object和Function既是对象又是函数)。就相当于所有的人包括上帝都有邪念一样。

拓展一下,由Object我们会想到Array,Number,String等这些内置对象。有理由相信这些都是Object的子类。如下:

  1. alert(Array instanceof Object) // true
  2. alert(String instanceof Object) // true
  3. alert(Number instanceof Object) // true
  4. alert(Object instanceof Array) // false
  5. alert(Object instanceof String) // false
  6. alert(Object instanceof Number) // false 

当然他们也都会有Object的特性就像魔鬼和撒旦的关系一样,也是Function的子类,由Function构造。那么有Array,String,Number构造的对像如:new Array();new Number();new String()的构造器是function Array(){...};function String(){...};function Number(){...};

  1. alert(Array instanceof Function) // true
  2. alert(String instanceof Function) // true
  3. alert(Number instanceof Function) // true
  4. alert(Array.constructor) // function Function(){ [native code] }
  5. alert(String.constructor) // function Function(){ [native code] }
  6. alert(Number.constructor) // function Function(){ [native code] }

 

总结一下,像内置的函数或说对象把如:Object,String,Array等等和自定义的function关键字定义的函数,都是Function的子类。new Function()相当于function关键字定义。这里可以引出,Function.prototype原型链上的属性所有函数共享,Object.prototype原型链上的属性所有对象共享。

分享到:
评论

相关推荐

    理解Javascript Function与Object

    理解JavascriptFunction与Object

    JavaScript中object和Object的区别(详解)

    JavaScript中object和Object有什么区别,为什么用typeof检测对象,返回object,而用instanceof 必须要接Object呢 这个问题和我之前遇到的问题非常相似,我认为这里有两个问题需要解决,一个是运算符new的作用机制,...

    控制台报错object is not a function的解决方法

    打开控制台发现报错:object is not a function。 感觉很奇怪,这块的功能最新没动过怎么会突然出问题了呢?上线时主流浏览器都测试过了呀。 虽然奇怪,但是还的解决问题。看着代码发现一个radio对象的name属性和一...

    JavaScript中Function函数与Object对象的关系

    今天我们来尝试理解Function和Object.因为这个里面有些人前期可能会搞糊涂.他们之间到底是什么关系.当然也不除外当初的我. 注意:官方定义: 在Javascript中,每一个函数实际上都是一个函数对象. 我们先来看最简单的...

    javascript Object与Function使用.docx

    javascript Object与Function使用.docx

    JavaScript中Object和Function的关系小结

    Function instanceof Object 和 Object instanceof Function 都是 true 1。我们可以认为 Object 是一个特殊的“类”,而这里的“类”即:Function 于是便可以理解为: Object = Function () {} 或 Object = new ...

    浅谈Javascript中的Function与Object

    主要简单介绍了Javascript中的Function与Object的关系,并附上示例分析,对于我们更好的理解Javascript中的Function与Object的关系很有帮助,有需要的小伙伴参考下。

    javascript中的 object 和 function小结

    在学习过传统的面向对象语言后,如 java c++,转学 javascript 却有点不适应,特别是 javascript 中所谓的 object(对象) function(函数),有时候会被搞晕。于是乎简单整理了下面的一些概念性的东西,方便学习和...

    Javascript创建自定义对象 创建Object实例添加属性和方法

    如下所示: 代码如下: var person = new Object(); person.name = “Nicholas”; person.age = “29” person.job = “Software Engineer”; person.sayName = function () { alert(this.name); }; person....

    浅谈Javascript中Object与Function对象

    1.Object对象  原型对象  原型是对象的一个属性,也就是prototype属性,每个对象都有这个内部属性,而且他本身也是一个对象。 [removed] Object.prototype.num= 10; alert("添加原型对象属性:"+ Object....

    JavaScript基础篇(3)之Object、Function等引用类型

    阅读目录 Object类型 1、通过构造函数来创建 2、通过字面量表示法来创建对象 Array类型 同样Array也有两种创建方式: ...我们在《一步步学习javascript基础篇(1):基本概念》中简单的介绍了五种基本数据类型Undef

    验证javascript中Object和Function的关系的三段简单代码

    话说在楼猪理解和实践能力尚欠火候的时候,在这篇里曾经照搬了李战老师不少东西写在自己的博客...下面楼猪就通过自己写的几段简单代码,论证一下javascript内置Object和Function的关系。 1、Function就是Object,Object

    javascript Object与Function使用

    本文着重解释一个比较常见但是非常容易使开发人员或者是初学JavaScript的人非常混淆的问题,那就是两个核心构造函数Object和Function,他们之间到底有什么关系?为何instanceof运算符的返回结果会让你感到混淆?本文...

    Professional JavaScript for Web Developers英文版

    oriented programingpowerful aspects of function expressionsBrowser Object Model allowing interaction with the browser itselfdetecting the client and its capabilitiesDocument Object Model (DOM) objects...

Global site tag (gtag.js) - Google Analytics