摘 要 在Ajax应用中,客户端的JavaScript编码越来越庞大,需要程序员有效地组织代码实现应用功能。JavaScript语言与C++、Java等语言在语法上类似,但其函数具有独特性,深入理解JavaScript语言中的函数与对象是掌握JavaScript的基础。
关键词 JavaScript;函数;对象
1 引言
随着富客户端技术的发展,尤其是Ajax技术的广泛应用,客户端JavaScript(后简写为JS)编码越来越庞大。函数是进行模块化程序设计的基础,要编写复杂的Ajax应用程序,必须对函数有深入地了解。JS中的函数不同于其他的语言,它的函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便地将一个函数赋值给一个变量或者将函数作为参数传递。
先看一下函数的使用语法:
function func1(…){…} var func2=function(…){…}; var func3=function func4(…){…}; var func5=new Function();
这些都是JS声明函数的正确语法,它们和其他语言中常见的函数定义方式有着很大的区别。
2 函数对象(Function Object)
可以用function关键字定义一个函数,并为每个函数指定一个函数名,通过函数名来进行调用。在JS解释执行时,函数都是被维护为一个对象,这就是要介绍的函数对象。
函数对象与其他用户所定义的对象有着本质的区别,这一类对象被称之为内部对象,例如日期对象(Date)、数组对象(Array)、字符串对象(String)都属于内部对象。这些内置对象的构造器是由JS本身所定义的,通过执行new Array()这样的语句返回一个对象,JS内部有一套机制来初始化返回的对象,而不是由用户来指定对象的构造方法。
在JS中,函数对象对应的类型是Function,正如数组对象对应的类型是Array,日期对象对应的类型是Date一样,可以通过new Function()来创建一个函数对象,也可以通过function关键字来创建一个对象。为了便于理解,比较函数对象的创建和数组对象的创建。先看数组对象,下面两行代码都是创建一个数组对象myArray:
var myArray=[]; //等价于 var myArray=new Array();
//同样,下面的两段代码也都是创建一个函数myFunction: function myFunction(a,b){ return a+b; } //等价于 var myFunction=new Function("a","b","return a+b");
通过和构造数组对象语句的比较,可以清楚地看到JS函数作为对象的本质,在解释器内部,当遇到这种语法时,就会自动构造一个Function对象,将函数作为一个内部的对象来存储和运行。一个函数对象名称(函数变量)和一个普通变量名称具有同样的规范,都可以通过变量名来引用这个变量,但是函数变量名后面可以加括号和参数列表来进行函数调用。
|