网站源码-图片-资料下载-学习资料-牛资料网!只做精品资料网
  • 首 页
  • JavaScript深入理解函数 - 函数的属性
    时间:2019-09-09 11:27 来源:www.xyhndec.com 编辑:免费资料 浏览:
    length属性

    函数的length属性表示函数希望接收参数的个数。例如下面的代码:

    function fn1(num1){
      return num1 * 10;
    }
    function fn2(num1,num2){
      return num1 + num2;
    }
    function fn3(){
      return true;
    }
    console.info(fn1.length);   // 1
    console.info(fn2.length);   // 2
    console.info(fn3.length);   // 0
    
    本段代码来自 https://www.jiangweishan.com/article/js1473436800911.html

    上面的代码中定义了3个函数,这3个函数的参数个数均不相同,通过控制台的打印可以看出各个函数所期望的参数个数是多少。

    call()和apply()方法

    每个函数都包括两个非继承来的方法:call()apply()。这两个方法的作用是在特定的作用域中调用函数,也就是说这两个方法可以通过函数名称来调用函数。

    对于apply()方法,第一个参数是调用方法的上下文,第二个参数是一个参数数组,可以直接把arguments传入。

    对于call()方法,第一个参数是上下文对象,第二个参数是不同的函数参数。

    例如下面的例子展示了apply()方法的应用。

    function sum(num1,num2){
      return num1+num2;
    }
    /* 通过arguments来调用 */
    function applySum1(num1,num2){
      //使用sum函数来完成一次调用,调用的参数就是applySum1这个函数的参数(此时的this是window)
      return sum.apply(this,arguments);
    }
    
    /* 通过参数数组来调用 */
    function applySum2(num1,num2){
      return sum.apply(this,[num1,num2]);
    }
    alert(applySum1(11,22));      //输出33
    alert(applySum2(11,22));      //输出33
    
    本段代码来自 https://www.jiangweishan.com/article/js1473436800911.html

    上面的applySum1()applySum2()两个函数是apply()方法的两种使用方式。

    applySum1()函数中,使用sum函数来完成调用,在apply()方法中,this是调用sum方法的上下文对象,即window对象,而调用的参数就是applySum1()方法的参数。

    applySum2()方法和applySum1()方法唯一的区别是参数不同,applySum2()apply()方法的参数是一个数组对象。

    call()方法和apply()方法的功能完全相同,不同的是call()方法是通过参数列表来完成调用。例如下面的例子:

    function callSum(num1,num2){
      //call是通过参数列表来完成调用,其它和apply没有任何区别
      return sum.call(this,num1,num2);
    }
    alert(callSum(11,22));      //输出33
    
    本段代码来自 https://www.jiangweishan.com/article/js1473436800911.html

    call()apply()方法的真正强大的地方是可以扩充函数运行的作用域。例如下面的例子:

    var color = "red";
    function showColor(){
      alert(this.color);
    }
    //创建了一个类
    function Circle(color){
      this.color = color;
      this.showColor = showColor;
    }
    var c = new Circle("yellow");
    
    //使用上下文(window)来调用showColor,结果是red
    showColor.call(this);
    //上下文对象是c,结果是yellow
    showColor.call(c);
    
    本段代码来自 https://www.jiangweishan.com/article/js1473436800911.html

    在这个例子中,showColor.call(this);是在全局作用域中调用showColor方法,此时的this == window,所以它会打印出颜色为“red”,而showColor.call(c);则是使用对象c作为调用showColor方法的上下文,所以会打印出颜色“yellow”。

    对于函数的prototype属性,我们将会在介绍JavaScript对象的时候详细讲解。

    郑重声明:
    牛资料网所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
    我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法下载,联系牛资料网索要。
    如有侵犯您的版权,请及时联系QQ:964613048,我们尽快处理。

    JavaScript面向对象-基于原型链实现继承JavaScript面向对象-基于原型链实现继
    JavaScript事件-事件流JavaScript事件-事件流
    正则表达式-正则表达式的元字符正则表达式-正则表达式的元字符
    推荐栏目
    • 客服:我们竭诚为您服务!
    • 客服:我们竭诚为您服务!