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


Posted in Javascript onAugust 03, 2018

本文实例分析了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 相关文章推荐
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
js和jquery对dom节点的操作(创建/追加)
Apr 21 Javascript
解析Jquery的LigerUI如何实现文件上传
Jul 09 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
Jan 14 Javascript
纯javascript移动优先的幻灯片效果
Nov 02 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
js图片放大镜效果实现方法详解
Oct 28 Javascript
bootstrap模态框示例代码分享
May 17 Javascript
vue高德地图之玩转周边
Jun 16 Javascript
underscore之Chaining_动力节点Java学院整理
Jul 10 Javascript
vue实现商城上货组件简易版
Nov 27 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
Aug 03 #Javascript
关于js对textarea换行符的处理方法浅析
Aug 03 #Javascript
webpack4 + react 搭建多页面应用示例
Aug 03 #Javascript
使用JS代码实现俄罗斯方块游戏
Aug 03 #Javascript
小程序tab页无法传递参数的方法
Aug 03 #Javascript
详解Webpack多环境代码打包的方法
Aug 03 #Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
Aug 03 #jQuery
You might like
生成静态页面的PHP类
2006/11/25 PHP
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
Python 流程控制实例代码
2009/09/25 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Django中Model的使用方法教程
2018/03/07 Python
pandas重新生成索引的方法
2018/11/06 Python
python对XML文件的操作实现代码
2020/03/27 Python
Python求凸包及多边形面积教程
2020/04/12 Python
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
就业自我评价
2014/02/04 职场文书
超市活动计划书
2014/04/24 职场文书
学用政策心得体会
2014/09/10 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
党员检讨书
2014/10/13 职场文书
小爸爸观后感
2015/06/15 职场文书
MySQL创建表操作命令分享
2022/03/25 MySQL
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏