`

(转)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

    在JavaScript中,Function和Object是两个非常重要的概念,它们之间存在着紧密的关系。在这篇文章中,我们将深入探讨Function和Object的关系,了解它们之间的联系和区别。 Function:函数对象 ---------------- 在...

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

    在JavaScript中,`object`和`Object`两者虽然在名称上仅有一字之差,但它们代表的概念却大不相同。理解这两者的区别对于深入掌握JavaScript的面向对象编程至关重要。 首先,`object`并不是JavaScript中的一个特定...

    javascript Object与Function使用.docx

    在JavaScript语言中,核心体系结构主要围绕两个构造函数——`Object`和`Function`构建。这两个构造函数不仅是所有其他对象的基础,也是理解JavaScript继承机制的关键。 #### 三、`instanceof`运算符详解 `...

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

    JavaScript中的引用类型主要涉及到Object、Array、Date、RegExp和Function等类型。它们具有以下特点和知识点: 1. Object类型是JavaScript中最为基础和常用的引用类型。它可以用来模拟现实世界中的对象模型,存储...

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

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

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

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

    JavaScript中Object和Function的关系小结

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

    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对象

    在JavaScript中,Object和Function对象是两种非常基础且重要的数据类型。它们构成了JavaScript语言的核心机制,涉及到了对象的创建、继承以及函数的处理等方面。本文将深入探讨这两个对象及其相关特性。 1. Object...

    浅谈Javascript中的Function与Object

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

    JavaScript中的Object对象学习教程_.docx

    JavaScript中的Object对象是语言的核心组成部分,...通过掌握Object对象的属性、方法和用法,开发者可以更好地处理和操作JavaScript中的对象。在实际编程中,熟练运用这些知识点对于提升代码质量、保证安全性至关重要。

    javascript中的 object 和 function小结

    - JavaScript中的`Object`是最基本的复杂数据类型,可以包含任意数量的属性和方法。 - 有两种创建对象的方式:使用`new Object()`构造函数或使用对象字面量`{}`。后者更简洁且常用。 - 对象的属性可以通过点`.`或...

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

    在探讨JavaScript编程语言中,对象(Object)和函数(Function)的关系是一个经典的讨论话题。由于JavaScript中的一切几乎都可以看做对象,甚至连函数本身都是对象,因此理解这一点对于深入学习和运用JavaScript至关...

    JavaScript对象拷贝与Object.assign用法实例分析

    在JavaScript中,通过简单赋值或使用`Object.assign()`方法可以实现浅拷贝。例如: ```javascript let objA = {name: '对象A', content: '我是A'}; let copyA = objA; ``` 在这个例子中,`copyA`只是`objA`的一个...

    javascript Object与Function使用

    在JavaScript中,`Object`和`Function`是两个至关重要的构造函数,它们构成了JavaScript对象体系的基础。`Object`是所有JavaScript对象的根源,而`Function`则是所有函数的基类。理解这两个构造函数之间的关系以及...

Global site tag (gtag.js) - Google Analytics