`
footman265
  • 浏览: 119087 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

理解JavaScript函数(函数和对象的区别和联系)

阅读更多


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


  除了函数对象,还有很多内部对象,比如: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事件列表。

 

分享到:
评论

相关推荐

    Javascript函数与对象

    ### JavaScript函数与对象详解 在JavaScript中,函数与对象是两个核心概念,它们构成了这门语言的基石。本文将深入探讨这两个主题,帮助读者更好地理解并掌握JavaScript。 #### 函数 函数是JavaScript中的第一类...

    javascript指南和函数式编程

    而《JavaScript函数式.zip》可能是一份关于JavaScript函数式编程的资料集合,函数式编程是一种编程范式,强调使用函数和避免改变状态。其中可能涵盖以下知识点: 1. **纯函数**:理解纯函数的定义,即给定相同的...

    JavaScript函数式编程.pdf

    在JavaScript函数式编程中,推崇使用纯函数,因为纯函数更容易测试、并行处理且易于理解。 5. 不可变性(Immutability) 不可变性是指数据一旦创建,在其生命周期内便不能被更改的特性。在JavaScript中,可以使用`...

    javascript函数式编程

    JavaScript函数式编程是一种编程范式,它强调将计算视为数据处理的过程,并且重视函数作为第一类公民,即函数可以作为变量赋值、作为参数传递、作为返回值返回。这种编程风格在JavaScript中尤其常见,因为它提供了...

    QT和网页中的JavaScript函数进行相互调用的实现

    - 这里的回调函数用于处理JavaScript函数的异步返回结果,如果需要同步获取结果,可以使用`QWebEngineScript`来注册一个全局JavaScript对象,然后通过该对象调用JavaScript函数。 2. **JavaScript调用QT函数**: ...

    javascript实现根据函数名称字符串动态执行函数的方法示例

    当函数不是全局函数时,我们可以将函数存储在一个对象中,之后通过对象的属性名来动态访问和执行函数。这种方式为函数调用提供了更灵活的组织结构。示例代码如下: ```javascript var myFunctions = { ...

    JavaScript内置函数与内置对象.doc

    JavaScript内置函数与内置对象.doc

    javascript_函数大全

    ### JavaScript函数...掌握JavaScript函数的不同使用方式和高级特性,对于提升编程技能和编写高效、可维护的代码至关重要。通过实践和深入理解,开发者可以充分利用函数的力量,构建出更加健壮和灵活的Web应用程序。

    JavaScript函数式编程

    全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...

    javascript函数速查

    JavaScript函数是编程语言的核心组成部分,它是一段可重复使用的代码块,可以接受参数并返回值。...总结,JavaScript函数是其强大和灵活的核心特性之一。理解并熟练运用上述知识点,将有助于编写高效、可维护的代码。

    理解Javascript函数形式参数与arguments

    理解Javascript函数形式参数与arguments 在JavaScript中,函数的形式参数和arguments之间存在着微妙的关系。为了深入理解这方面的知识,我们需要首先了解形式参数和实际参数的概念。形式参数指的是定义方法时所明确...

    JavaScript函数式编程pdf

    JavaScript函数式编程是一种编程范式,它将计算视为数据处理,并强调使用无副作用的纯函数。在JavaScript中,函数式编程允许我们写出更简洁、可读性更强的代码,同时提高了代码的复用性和测试性。《JavaScript函数式...

    javascript打印函数(所有对象)

    一个javascript函数,可打印出所有的对象(包括数组),方便页面调试

    JavaScript中函数对象调用模式总结

    JavaScript中的函数对象调用模式是编程中至关重要的概念,它涉及到函数作为一等公民、作用域、闭包、原型链等多个核心知识点。...通过阅读这份文档,开发者可以进一步巩固和深化对JavaScript中函数对象调用模式的理解。

    深入理解javascript构造函数和原型对象

    在深入理解JavaScript的过程中,构造函数和原型对象是两个核心概念。JavaScript是一种基于对象(Object-based)和原型(Prototype-based)的语言,其对象模型与传统的基于类(Class-based)语言有所不同。理解构造...

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

    通过和构造数组对象语句的比较,可以清楚地看到 JavaScript 函数作为对象的本质,在解释器内部,当遇到这种语法时,就会自动构造一个 Function 对象,将函数作为一个内部的对象来存储和运行。 函数对象的调用 函数...

    深入理解javascript原型和闭包.pdf

    这表明了JavaScript函数的灵活性和对象的特性。在JavaScript中,函数、数组、对象等都是对象,它们可以包含各种属性,甚至可以动态地修改自己的结构。 原型(Prototype)是JavaScript实现继承的基础,每一个对象都...

    理解JavaScript中函数的使用

    本文将深入探讨JavaScript中的函数概念、不同类型的函数定义方式及其应用场景,并结合实例帮助读者更好地理解和应用这些知识。 #### 函数的基本概念 函数在JavaScript中是一种特殊的数据类型,它可以被当作值来...

    JavaScript 函数式编程 (英文版)

    总之,JavaScript函数式编程提供了一种新的思考问题和解决问题的方式,它鼓励我们编写无副作用、可组合的代码,提高代码质量,降低维护难度。掌握函数式编程的思想和技术,对于提升JavaScript编程能力大有裨益。在...

    Javascript函数帮助手册

    JavaScript函数帮助手册是一份详尽的资源,专为学习和理解JavaScript编程语言中的函数和时间对象函数而设计。这份手册不仅适用于初学者,也对有经验的开发者具有很高的参考价值。下面将详细介绍JavaScript函数和时间...

Global site tag (gtag.js) - Google Analytics