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实现的掷色子游戏动画效果
Mar 14 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
May 08 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
Jul 21 Javascript
第一次动手实现bootstrap table分页效果
Sep 22 Javascript
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 Javascript
javascript用rem来做响应式开发
Jan 13 Javascript
js实现一个简单的MVVM框架示例
Jan 15 Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 Javascript
javascript匿名函数中的'return function()'作用
Oct 15 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 Javascript
在vue中使用echars实现上浮与下钻效果
Nov 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,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
Vue组件开发初探
2017/02/14 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
js实现表格数据搜索
2020/08/09 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
python简单实例训练(21~30)
2017/11/15 Python
python进行TCP端口扫描的实现
2018/12/21 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
怎样写好自荐信和推荐信
2013/12/26 职场文书
运动会广播稿500字
2014/01/28 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
家长对老师的评语
2014/04/18 职场文书
高中学生评语大全
2014/04/25 职场文书
关于保护环境的建议书
2014/05/13 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
预备党员公开承诺书
2014/05/28 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android