首页 > JavaScript > javascript 函数的属性
2009六月10

javascript 函数的属性

看到标题,列位看官可能有些迷惑了,啥玩意?函数还能有属性?没错,在javascript中函数还真就有属性,这是因为函数实际上是一种javascript对象,即Function对象。

既然是对象,那么当然就有自己的属性,这还不算,还可以自己为函数定义属性。同样函数也有自己的函数啊,这虽然有点怪,不过却是真的,这个函数的函数(咋这么别扭)我们下一篇再做讲解。

这里,我们先来看一下javascript函数的属性。

函数的length属性:

刚上一篇写过的arguments属性length一定会给有心人眼前一亮的感觉,现在我们就来看一下函数的length属性是干啥用的。

arguments.length表示的是实际上传给函数的参数的个数。而函数的length属性则代表函数需要的实际参数的数目。这是一个只读特性,说白了,就是在函数定义时你定义了几个参数,这个值就是几。

看到这里,您可能又要奇怪了。我咋获取这个函数的length属性啊?

别着急。上一篇中我不是提到了arguments的callee属性吗?这代表啥?这代表这个函数本身啊。

所以,我们就可以用arguments.callee.length来表示函数的length属性。

//判断所传参数是否与函数定义所需参数数目相同
function check(args)
{
    //arguments.length实际传的参数数目
    var actual = args.length;  
    //真正需要传的参数的数目
    var expected = args.callee.length;
   
    if(actual != expected){
        throw new Error("Wrong number of arguments:expected:"  + expected + "; actually passed " + actual);
    }
}

//在函数执行前调用check函数
function f(x,y,z)
{
    //检查实际参数数目与所需数目(3个)是否相等
    check(arguments);
    //这里正常运行下面的内容
    return x + y + z;
}

函数的prototype属性:

这个属性物是函数预定义的原型对象,在使用new运算符把作为构造函数时起作用,在定义新的对象类型时起着非常重要的作用。

因为“犀牛”这本书是在下一章才介绍这个属性,我也就先不写了,事实上是我也没有看,也不会,也写不出来。自嘲的大笑三声,哈~~

定义你自己的函数属性:

上面已经说了,函数是对象,那么也就可以自己定义属性。

我们在编程的时候都要讲低耦合,高内聚,职责单一,自己的活自己干,干应该干的活

有的时候呢,我们需要使用一个在调用过程中都保持不变的值,使用Function对象的属性比定义全局变量更加方便,因为全局变量会使命名空间变的散乱。

    //创建并初始化静态变量
    //因为函数声明在执行代码前处理,所以在函数声明前不能真正实现这个赋值运算
    uniqueInteger.counter = 0;

    //函数实现功能:在每次调用的时候使返回值都不同,这就需要记录上一次的返回值
    //而最了解自己的人永远是自己,自己的属性自己是了如指掌的,所以这里采用更改自己的属性
    function uniqueInteger()
    {
        return uniqueInteger.counter ++;
    }

    document.write(uniqueInteger()+"<br/>");
    document.write(uniqueInteger()+"<br/>");
    document.write(uniqueInteger()+"<br/>");

函数的属性就写这些东西吧,多了我也写不出来,书上就只写了这么多,一般我写日志的格式是,书上的代码尽量照抄,抄之前自己会运行一下。呵。

再加上一些自己的言论,使自己记忆更加深刻一些。

还是重复那句口号:GOOD GOOD STUDY,DAY DAY UP~

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/06/10/836/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

2 Responses to “javascript 函数的属性”

  1. #1 LAONB 回复 | 引用 Post:2009-06-11 01:15

    好好学习,天天向上。

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2009-06-11 09:47

    @LAONB
    呵呵,是啊,好好学习,天天向上。加油 :roll:

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)