JavaScript中call和apply方法的区别实例分析

 更新时间:2018年08月03日 11:36:05   作者:咕咚萝卜  
这篇文章主要介绍了JavaScript中call和apply方法的区别,结合实例形式分析call和apply方法的功能、原理及相关使用操作区别,需要的朋友可以参考下

本文实例分析了JavaScript中call和apply方法的区别。分享给大家供大家参考,具体如下:

这两个方法不经常用,但是在某些特殊场合中是非常有用的,下面主要说下它们的区别:

1、首先,JavaScript是一门面向对象的语言,也就是说它有this的概念。而且JavaScript是一门动态类型语言,为什么说它是动态类型语言呢?因为JavaScript在编译时没有类型检查的过程,不会去检查创建的对象类型,也不会去检查传递的参数类型,所以它的变量类型在运行期间是可以改变的。

2、要知道callapply都是为了改变某个函数运行时的上下文(context)而存在的,也就是为了改变函数,也可以说是对象(函数本身就是对象)内部this的指向而存在的。

3、二者区别为:传参数的方式不一样,如下:

func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2]);

上面也很清楚了,call传参数时,明确知道时几个参数或者参数较少时,比如arg1arg2,挨个传就是了;

apply第二个参数必须为一个数组,即将参数放进数组中即可。

4、实例

(function(){
 Array.prototype.push.call(arguments, 4);//arguments借用Array.prototype.push方法
 console.log( arguments ); //输出: [1, 2, 3, 4]
})(1, 2, 3);
var currying = function(fn){
  var args = [];
  return function(){
    if( arguments.length === 0){
      return fn.apply( this, args);
    }
    else{
      [].push.apply( args, arguments);
      return arguments.callee; //callee已弃用
    }
  }
};
var cost = (function(){
 var money = 0;
 return function(0{
   for(var i = 0,l - arguments.length;i<l;i++){
     money += arguments[i];
   }
   return money;
 }
})();

调用:

var cost_ = currying(cost); //将cost转化成curring函数
cost_(1); cost_(2); alert(cost_()); //输出:3

解释:通过currying(柯里化)的转化,在cost_中传入参数时,未能得到值,而是将值存储起来,直到当无参数传入时,输出结果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • JavaScript中用字面量创建对象介绍

    JavaScript中用字面量创建对象介绍

    这篇文章主要介绍了JavaScript中用字面量创建对象介绍,本文直接给出代码实例,并讲解了一些技巧,需要的朋友可以参考下
    2014-12-12
  • Javascript基于jQuery UI实现选中区域拖拽效果

    Javascript基于jQuery UI实现选中区域拖拽效果

    这篇文章主要介绍了Javascript基于jQuery UI实现选中区域拖拽效果的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • JavaScript实现动态生成表格

    JavaScript实现动态生成表格

    这篇文章主要为大家详细介绍了JavaScript实现动态生成表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • JS实现“隐藏与显示”功能(多种方法)

    JS实现“隐藏与显示”功能(多种方法)

    这篇文章主要介绍了JS实现“隐藏与显示”功能的多种方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • JS实现Tab栏切换的两种方式案例详解

    JS实现Tab栏切换的两种方式案例详解

    这篇文章主要介绍了JS实现Tab栏切换的两种方式,一种是面向过程的写法,一种是面向对象的写法,本文给大家分享详细案例代码,需要的朋友可以参考下
    2022-08-08
  • JS弹出居中的DIV的代码

    JS弹出居中的DIV的代码

    一直都在想怎么样使弹出的DIV能在任何时候都是居中显示的,刚开始的时候是用CSS样式直接定义好层的位置,但是当页面很长的时候,或是浏览器窗口大小不是固定的时候就不能正确的显示,所以只好用JS来控制DIV的显示位置。
    2008-06-06
  • es6中??与||区别小结

    es6中??与||区别小结

    本文主要介绍了es6中??与||区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 记录几个javascript有关的小细节

    记录几个javascript有关的小细节

    记录几个javascript有关的小细节...
    2007-04-04
  • javascript  Error 对象 错误处理

    javascript Error 对象 错误处理

    javascript常见error对象处理,错误代码集合
    2008-05-05
  • 一个简单的弹性返回顶部JS代码实现介绍

    一个简单的弹性返回顶部JS代码实现介绍

    页面滚动条处于低端,点击回到顶部,并且隐藏掉,具体实现代码如下,感兴趣的朋友可以参考下哈
    2013-06-06

最新评论