`
liaoyixun
  • 浏览: 47092 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

函数对象和其他内部对象的关系(JS)

阅读更多
除了函数对象,还有很多内部对象,比如:Object、Array、Date、RegExp、Math、Error。这些名称实际上表示一个类型,可以通过new操作符返回一个对象。然而函数对象和其他对象不同,当用typeof得到一个函数对象的类型时,它仍然会返回字符串 “function”,而typeof一个数组对象或其他的对象时,它会返回字符串“object”。下面的代码示例了typeof不同类型的情况:

以下是引用片段:
alert(typeof(Function)));
alert(typeof(new Function()));
alert(typeof(Array));
alert(typeof(Object));
alert(typeof(new Array()));
alert(typeof(new Date()));
alert(typeof(new Object()));


  运行这段代码可以发现:前面4条语句都会显示“function”,而后面3条语句则显示“object”,可见new一个function 实际上是返回一个函数。这与其他的对象有很大的不同。其他的类型Array、Object等都会通过new操作符返回一个普通对象。尽管函数本身也是一个对象,但它与普通的对象还是有区别的,因为它同时也是对象构造器,也就是说,可以new一个函数来返回一个对象,这在前面已经介绍。所有typeof返回 “function”的对象都是函数对象。也称这样的对象为构造器(constructor),因而,所有的构造器都是对象,但不是所有的对象都是构造器。

  既然函数本身也是一个对象,它们的类型是function,联想到C++、Java等面向对象语言的类定义,可以猜测到Function类型的作用所在,那就是可以给函数对象本身定义一些方法和属性,借助于函数的prototype对象,可以很方便地修改和扩充Function类型的定义,例如下面扩展了函数类型Function,为其增加了method1方法,作用是弹出对话框显示"function":

以下是引用片段:
Function.prototype.method1=function(){
      alert("function");
}
function func1(a,b,c){
      return a+b+c;
}
func1.method1();
func1.method1.method1();


  注意最后一个语句:func1.method1.mehotd1(),它调用了method1这个函数对象的method1方法。虽然看上去有点容易混淆,但仔细观察一下语法还是很明确的:这是一个递归的定义。因为method1本身也是一个函数,所以它同样具有函数对象的属性和方法,所有对 Function类型的方法扩充都具有这样的递归性质。

  Function是所有函数对象的基础,而Object则是所有对象(包括函数对象)的基础。在JavaScript中,任何一个对象都是 Object的实例,因此,可以修改Object这个类型来让所有的对象具有一些通用的属性和方法,修改Object类型是通过prototype来完成的:

以下是引用片段:
Object.prototype.getType=function(){
       return typeof(this);
}
var array1=new Array();
function func1(a,b){
      return a+b;
}
alert(array1.getType());
alert(func1.getType());


  上面的代码为所有的对象添加了getType方法,作用是返回该对象的类型。两条alert语句分别会显示“object”和“function”。

      将函数作为参数传递

  在前面已经介绍了函数对象本质,每个函数都被表示为一个特殊的对象,可以方便的将其赋值给一个变量,再通过这个变量名进行函数调用。作为一个变量,它可以以参数的形式传递给另一个函数,这在前面介绍JavaScript事件处理机制中已经看到过这样的用法,例如下面的程序将func1作为参数传递给func2:

以下是引用片段:
function func1(theFunc){
      theFunc();
}
function func2(){
      alert("ok");
}
func1(func2);

  在最后一条语句中,func2作为一个对象传递给了func1的形参theFunc,再由func1内部进行theFunc的调用。事实上,将函数作为参数传递,或者是将函数赋值给其他变量是所有事件机制的基础。

例如,如果需要在页面载入时进行一些初始化工作,可以先定义一个init的初始化函数,再通过window.onload=init;语句将其绑定到页面载入完成的事件。这里的init就是一个函数对象,它可以加入window的onload事件列表。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ty110119120/archive/2009/06/11/4260053.aspx
分享到:
评论

相关推荐

    JavaScript中函数与对象的解析.pdf

    在 JavaScript 中,函数对象对应的类型是 `Function`,正如数组对象对应的类型是 `Array`,日期对象对应的类型是 `Date` 一样。可以通过 `new Function()` 来创建一个函数对象,也可以通过 `function` 关键字来创建...

    JS 四种函数调用模式

    在 JS 中,有四种主要的函数调用模式,分别是:普通函数调用、方法调用、构造函数调用和apply/call调用。下面我们将详细探讨这些调用模式。 1. **普通函数调用**: 这是最常见的情况,函数作为一个独立的实体被执行...

    函数之间调用同一个对象方法

    在给定的例子中,“函数之间调用同一个对象方法”指的是在一个函数内部创建对象并调用其方法,然后在另一个函数中再次调用同一对象的相同或不同方法。这种模式常见于事件驱动的编程环境,例如游戏开发或GUI应用程序...

    函数和window对象

    总结来说,理解和掌握JavaScript中的函数和`window`对象对于开发Web应用程序至关重要。函数是组织和复用代码的关键工具,而`window`对象则提供了与浏览器环境交互的接口。通过深入学习这两个主题,开发者可以更高效...

    js的对象与函数详解

    JavaScript是一种基于对象的编程语言,提供了丰富的对象模型和函数定义方式。以下是对给定文件内容中提到的知识点的详细解析。 一、对象的基础知识 对象是JavaScript中最核心的概念之一,它表示一个实体,可以是一...

    javascript对象和函数[文].pdf

    总的来说,理解JavaScript中的对象、函数和原型链对于编写高质量的JavaScript代码至关重要。通过深入学习和实践,开发者可以更好地掌握JavaScript的核心概念,从而编写出更高效、更灵活的代码。

    详解JavaScript函数对象

    总的来说,JavaScript函数对象是其动态特性和灵活性的关键组成部分。它们可以作为值传递,可以作为事件处理程序,也可以用作创建自定义对象的构造函数。理解和熟练运用函数对象对于深入掌握JavaScript编程至关重要。

    js自定义对象讲解

    在JavaScript中,自定义对象可以通过对象字面量或构造函数来创建,以扩展语言的功能。它们与JS的标准对象相对,后者如Date、Array等是由语言内置的。 1.2.2 原型(prototype) 原型是JavaScript中一种特殊的概念,...

    面向对象JavaScript精要(英文原版pdf)

    - **第七章:混合式编程**:介绍如何结合面向对象编程与其他编程范式(如函数式编程)来构建复杂的系统。 #### 五、读者对象及学习目标 本书适合有一定JavaScript基础的开发者阅读。通过本书的学习,读者可以深入...

    js回调函数

    闭包的特点是能够读取其他函数内部的变量。 JS代码 ``` function f1(){ n=999; function f2(){ alert(n); // 999 } return f2; } var result=f1(); result(); // 999 ``` 在上面的代码中,我们定义了一个函数...

    js中函数的理解

    JS中的函数是第一类公民,这意味着函数可以作为其他函数的参数,也可以作为其他函数的返回值。这种特性使得JS非常适合实现高阶函数,如`map`, `filter`, `reduce`等。 五、闭包 闭包是JS中另一个与函数相关的高级...

    JavaScript对象模型

    对象是JavaScript中最基础且重要的数据结构之一,它是一个无序属性的集合,其中属性的值可以是简单数据类型、其他对象或函数。每个对象都有自己的原型链,通过它可以访问到更多的属性和方法。此外,JavaScript中的...

    define方法和构造函数return对象学习

    在JavaScript编程中,构造函数是一种特殊类型的函数,用于创建和初始化特定类型的新对象。通常情况下,构造函数内部不直接返回值,而是通过`new`关键字来创建新实例。但是,如果构造函数中包含`return`语句,并且...

    JavaScript之私有属性,私有函数,函数实现对外不可见

    在JavaScript编程中,私有属性和私有函数是实现封装和数据隐藏的关键概念。这些特性使得我们可以更好地控制代码的访问权限,防止外部直接修改或访问内部状态,从而增强程序的安全性和稳定性。在JavaScript中,虽然...

    JavaScript对象模型-执行模型

    - **Function**: 函数类型的用户接口,所有函数对象的原型。 - **Object**: 所有对象类型的基类,提供了一些通用的方法。 - **Boolean, Number, String**: 分别对应布尔值、数值和字符串的封装对象,可用于将简单...

    CSDN官方js函数大全

    CSDN官方发布的这个“js函数大全”集合了JavaScript中的各种常见函数,对于学习和查阅JavaScript功能具有极大的帮助。下面我们将深入探讨其中的一些重要知识点。 1. **变量与数据类型**: JavaScript支持动态类型...

    在js中创建类和对象

    在JavaScript中,我们可以定义一个函数,如`createFruit`,它内部创建一个新的对象并返回。虽然简洁,但这种方法没有明显的类型标识,且每个对象的实例方法都会占用额外的内存空间,因为每个实例都有独立的`showName...

    常用的JS 特效 函数

    JavaScript,简称JS,是Web开发中的重要脚本语言,用于实现网页的动态效果和交互功能。这个主题“常用的JS特效函数”涵盖了多个方面,包括动画、事件处理、DOM操作等,下面将详细介绍这些知识点。 一、动画效果 ...

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式).docx

    - **this 指向实例**:构造函数内部使用 `this` 来指向新创建的对象。 - **无需 return**:构造函数自动返回一个新创建的对象。 **优点**: - **可读性强**:通过 `new` 关键字调用构造函数,明确指出这是在创建...

    JS 函数式编程指南

    JavaScript(简称JS)函数式编程是一种编程范式,它强调将计算视为函数的组合,而不是状态的变化或指令的序列。这种编程风格可以帮助开发者编写出更简洁、可读性更强、易于测试和维护的代码。本指南将深入探讨JS函数...

Global site tag (gtag.js) - Google Analytics