JavaScript学习笔记之Function对象

 在JavaScript中,函数function就是对象。

JS中没有方法重载

  在JavaScript中,没有方法(函数)重载的概念。

  例子:

代码如下:

<html>
       <head>
              <script type="text/javascript">
              function add(number)
              {
                    alert(number + 20);  
              }
              function add(number, number1)
              {
                     alert(number + 30);  
              }          
              add(10);
              </script>
       </head>
       <body>
       </body>
</html>

网页中弹框显示的是40。

  说明虽然第二个方法是两个参数,但是仍然调用了它。

  交换两个方法的顺序之后,弹框显示30,可以看出不管参数个数如何,是调用同名的后面的方法。

  怎么解释这个现象?

  这是因为函数声明实际上是建立了一个对象:

代码如下:

<html>
    <head>
        <script type="text/javascript">
        function add(number)
        {
             alert(number + 20);   
        }
        /*
        上面的函数等价于:
        var add = function(number)
        {
            alert(number + 20);
        }
        */       
        function add(number, number1)
        {
            alert(number + 30);   
        }
        /*
        上面的函数等价于:
        var add = function(number, number1)
        {
            alert(number + 30);
        }   
        */
        add(10);
        </script>
    </head>
    <body>   
    </body>
</html>

  这样add实际指向的是后面的对象,而方法调用的时候赋予的参数将会按顺序赋给方法形式参数,后面没有被赋值的参数就是undefined。

  JavaScript的函数调用的时候没有严格的参数个数检查,实参个数小于形参个数是可以的,没有被赋值的形参就是未定义值undefined。

  实参个数大于形参个数也是可以的,这样只有前面的实参会被使用,多出来的实参不会被使用。

Function对象

  在JavaScript中有一个Function对象,所有自定义的函数都是Function对象类型的。

  Function对象接收的所有参数都是字符串类型的,其中最后一个参数就是要执行的函数体,而前面的参数则是函数真正需要接收的参数。

  例子:

代码如下:

<html>
    <head>
        <script type="text/javascript">
        var add = new Function("number", "number1", "alert(number + number1);");
        var add = new Function("number", "alert(number + 20);");
        add(10, 30);
        </script>
    </head>
    <body>   
    </body>
</html>

隐含对象arguments

  在JavaScript中,每个函数都有一个隐含的对象arguments,表示给函数实际传递的参数。

  arguments和函数的形式参数及其个数无关。

  arguments有个有用的属性length,表示实参的长度。可以借助这个来模拟出函数的重载:

  练习例子:

代码如下:

<html>
    <head>
        <script type="text/javascript">
        function add(number1, number2)
        {
            alert(arguments.length);           
            alert(arguments[0]);
            alert(arguments[1]);
            alert(arguments[2]);
        }   
        //add(2, 3, 4);
        function add2()
        {
            if(1 == arguments.length)
            {
                alert(arguments[0]);
            }
            else if(2 == arguments.length)
            {
                alert(arguments[0] + arguments[1]);
            }
            else if(3 == arguments.length)
            {
                alert(arguments[0] + arguments[1] + arguments[2]);
            }
        }
        add2(3);
        add2(3, 4);
        add2(3, 4, 5);
        </script>
    </head>
    <body>   
    </body>
</html>

  每一个函数对象都有一个length属性,表示该函数期望接收的参数格式。

  它与函数的arguments不同,arguments.length表示函数实际接收的参数个数。

  例子:

代码如下:

<html>
    <head>
        <script type="text/javascript">
        var add = function(num, num2, num3)
        {
            alert(num + num2 + num3);
        }   
        alert(add.length); //输出3
        add(1, 2, 3);
        var add2 = function()
        {
        }
        alert(add2.length); //输出0
        </script>
    </head>
    <body>
    </body>
</html>

(0)

相关推荐

  • 每天一篇javascript学习小结(Date对象)

    1.Date.now() //Date.now() is in ECMAScript 5 //Prior to that, use +new Date() //获取当前时间 var now = (typeof Date.now == "function" ? Date.now() : +new Date()); alert("Right now: " + now); 2.Date.parse()方法 var now = new Date(); alert(now);

  • 每天一篇javascript学习小结(Function对象)

    小编两天都没有更新文章了,小伙伴们是不是等着急了,今天开始再继续我们的<每天一篇javascript学习小结>系列文章,希望大家继续关注. 1.Function  函数调用(类似call方法) function callSomeFunction(someFunction, someArgument){ return someFunction(someArgument); } function add10(num){ return num + 10; } var result1 = callSo

  • 每天一篇javascript学习小结(Boolean对象)

    创建 Boolean 对象的语法:     new Boolean(value);    //构造函数     Boolean(value);        //转换函数     参数 value 由布尔对象存放的值或者要转换成布尔值的值. 返回值     当作为一个构造函数(带有运算符 new)调用时,Boolean() 将把它的参数转换成一个布尔值,并且返回一个包含该值的 Boolean 对象.     如果作为一个函数(不带有运算符 new)调用时,Boolean() 只将把它的参数转换成

  • 每天一篇javascript学习小结(Array数组)

    1.数组常用方法 var colors = ["red", "blue", "green"]; //creates an array with three strings alert(colors.toString()); //red,blue,green alert(colors.valueOf()); //red,blue,green alert(colors); //red,blue,green 2.数组map()方法 var number

  • 关于javascript function对象那些迷惑分析

    js中function对象是一个令人着迷的东西,但由于他太过于灵活,常常令人迷惑,下面我贴一些代码: 大多数人这样简写: 复制代码 代码如下: function test () {} <jsvascript语言精粹>整本书这样写: 复制代码 代码如下: var test = function () {} 函数可以立即运行并赋值: 复制代码 代码如下: var test = function () {} () // test === undefined var test2 = function

  • 每天一篇javascript学习小结(基础知识)

    1.字符转换 var s1 = "01"; var s2 = "1.1"; var s3 = "z";//字母'z'无法转换为数字,所以或返回NaN var b = false; var f = 1.1; var o = { valueOf: function() { return -1; } }; s1 = -s1; //value becomes numeric -1 s2 = -s2; //value becomes numeric -1.

  • JavaScript学习小结(一)——JavaScript入门基础

    一.JavaScript语言特点 1.1.JavaScript是基于对象和事件驱动的(动态的) 它可以直接对用户或客户输入做出响应,无须经过Web服务程序.它对用户的响应,是采用以事件驱动的方式进行的.所谓事件驱动,就是指在主页中执行了某种操作所产生的动作,就称为"事件".比如按下鼠标,移动窗口,选择菜单等都可以视为事件.当事件发生后,可能会引起相应的事件响应. 1.2.JavaScript是跨平台的 JavaScript是依赖于浏览器本身的,与操作系统无关. 二.JavaScript

  • Javascript Function对象扩展之延时执行函数

    不就利用window对象的setTimeout方法吗?Bingo,一点没错!如果你在一个应用里面常常要"延时执行某某函数",那末基于DRY的原则,可以针对Function全局对象进行扩展,为函数增加一个延时方法如delay,这样会让你的代码更简洁有效. 扩站Function对象增加delay方法如下: 复制代码 代码如下: Function.prototype.delay=function(this1,timeout){ this1=this1||null; timeout=timeo

  • 浅谈Javascript中Object与Function对象

    1.Object对象 原型对象           原型是对象的一个属性,也就是prototype属性,每个对象都有这个内部属性,而且他本身也是一个对象. <script type="text/javascript"> Object.prototype.num= 10; alert("添加原型对象属性:"+ Object.num); Object.num = 20; alert("添加对象属性:"+Object.num); </

  • 浅谈javascript对象模型和function对象

    javascript中,函数就是对象 复制代码 代码如下: <html> <head> <script type="text/javascript"> function add(number){     alert(number+20); } var add=function(number){ alert(number+20); } function add(number,number1){     alert(number+30); } var a

随机推荐