2007-05-27

javaScript中的Function对象的说明

关键字: web/javaScript

很多人都不理解javaScript 中的Function是什么,与function 又有什么区别
简单的说呢 function 是函数,而Function是类

在javaScript 我们声明一个函数,实际上是创建了一个 Function 类的对象。

例如:

  1. function sayHello(name)   
  2. {   
  3.   alert("Hello "+name);   
  4. }   

这是一个最简单的函数,参数为name,然后在参数前加上"Hello ",输出
同样,我们也可以这样声明函数
var sayHello = new Function("name","alert('Hello '+name)");
在这种形式中,第一个参数是sayHello 函数的参数,第二个参数是sayHello 函数的函数体

通过这种形式,我们可以很清楚的看出所谓的函数只不过是Function类的一个对象
而函数名只不过是对这个对象的引用。可以简单的把函数名理解成为一个指针,指向所引用的
Function 类的实例。

因为函数名只不过是对象名,所以可以可以把函数名作为参数传递,如下:

js 代码
  1. function callSay(funNam,argu)   
  2. {   
  3.   funNam(argu);   
  4. }   
  5.   
  6. callSay(sayHello,"xiaofei");   

ok,看到了,你完全可以把函数名当一个变量名来使用,因为它就是一个变量名。
你也可以这么使用

js 代码
  1. function sayHello()   
  2. {   
  3.   alert("Hello");   
  4. }   
  5. function sayBye()   
  6. {   
  7.   alert("Bye");   
  8. }   
  9.   
  10. sayHello = sayBye;  

这样 sayHello 和 sayBye 所指向的就是同一个函数,也就是说他们指向同一个Function类的实例。

Function类,对于我们实际编程来说,很少使用到,但是理解它,有助于我们对于javaScript中函数的理解。

Ok,既然函数只是Function类的一个对象,一个实例,所以自然地,它就会有方法和属性。
属性:length--代表函数定义的形参个数,prototype--原型属性,相信这是大家都非常熟悉的一个属性,可以用它来实现构造类,还有arguments,constructor,callee,caller等
方法:valueOf(),toString() --这两个方法返回的都是函数的源代码,apply(),call() 这两个方法大同小异,区别就是参数不同。

现在我们应该清楚,函数名就是变量名。

js 代码
评论
发表评论

您还没有登录,请登录后发表评论

xiaofeizm55333
搜索本博客
博客分类
最近加入圈子
最新评论
评论排行榜