Tags标签 网战地图
当前位置: 主页 > 网页设计 > JavaScript >

JavaScript面向对象程序设计(4) 函数

2014-06-09 21:56 [JavaScript] 来源于:
导读:在很多语言中,函数(Java里面成为方法)和对象时截然不同的两种东西。函数被定义为对象的动作, 或者是全局的(像在C++中的main函数一样)。但是在JavaScript中,

在很多语言中,函数(Java里面成为方法)和对象时截然不同的两种东西。函数被定义为对象的动作, 或者是全局的(像在C++中的main函数一样)。但是在JavaScript中,函数和对象的界限却显得不那么明显 。

1.函数的定义

JavaScript中有很多种定义函数的方法:

function hello() { alert("Hello!"); }
var hello1 = function() { alert("Hello! "); };
var hello2 = new Function("", "alert('Hello! ');");
hello();
hello1();
hello2();

上面给出了三种 JavaScript的函数定义语句。第一句是常见的定义,看上去和Java等语言没有太大的不同。这句是定义 了一个具名函数,按照上面的例子,这里的函数定义名字为hello。第二句是将一个匿名函数定义好后赋 值给一个变量,于是通过这个变量就可以引用这个匿名函数。这两句看上去效果差不多,但是它们是不 一样的:第一句定义的是一个具名函数,第二句定义的是一个匿名函数——尽管你可以通过 这个变量引用到这个匿名函数,但实际上它还是匿名的。它们的区别可以由下面的看出:

hello();
hello1(); // error
function hello() { alert("Hello! "); }
var hello1 = function() { alert("Hello!"); };

具名函 数的作用范围是全局的:你可以在定义之前使用这个函数。但是匿名函数的定义是后向的,像C/C++一样 ,必须在定义之后才能使用。这就是为什么 hello可以使用,但是hello1就会有错误。然后试想一下这 是为什么呢?JavaScript的解释过程和HTML一样是从上到下的。所以,这里的匿名函数就相当于是一个 变量的定义,因此在JavaScript解释器解释执行时并不知道这个变量的定义,因此发生错误。但是,对 于函数的定义则是扫描全局。

第三个语句就很有意思了。它创建了一个Function类的对象。这个 构造函数(姑且这么叫吧)具有两个参数,第一个是函数的参数,第二个是函数体。具体来说,下面的两 个函数定义是等价的:

function sayHelloTo(name) {
 alert("Hello, " + name);
}
var sayHelloTo1 = new Function("name", "alert('Hello, ' + name)");

这种使用Function进行定义的方式并不常见,但是这个语句显示的特性却 很有趣:它意味着,你可以使用这种构造函数在运行时动态的构造函数!这是一般的语言没有的特性。

2.函数的参数

JavaScript的函数也是相当的灵活,不仅是它的定义方式多种多样,甚至 它的参数都有“奇怪”的行为。由于JavaScript是弱类型的语言,因此,它不能对你的函数 参数类型做检测,甚至不能保证你传入的参数个数是否和函数定义一致。这就需要有一些特殊的检测。

function sum2(a, b) {
 alert(a + b);
}
sum2(1); // NaN
sum2(1, 2); // 3
sum2(1, 3, 5); // 4

看这个例子,仅仅接受两个参数的函数,在调用时可以有任意个参数!但是,它仅取用符合条件的个数 ,在这里也就是前两个参数。所以,当你传入一个参数时,JavaScript试图将两个数字加起来,结果第 二个参数不存在,因此返回值是NaN。第三种情况,实参个数多于形参个数,此时 JavaScript只取前两 个参数相加。

尽管很不正式,但是可以说,JavaScript的函数参数是不定参数,也就是说,你可 以传入任意的参数值。使用JavaScript函数内置的arguments就可以遍历所有传入的参数。比如下面的代 码:

function sum() {
 var total = 0;
 for(var i = 0; i < arguments.length; i++) {
  total += arguments[i];
 }
 alert(total);
}
sum(1, 2);
sum(1, 2, 3);

(编辑:)

本文标签:
网友评论

栏目列表

推荐文章