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在GBK编码下表单提交终极解决方案(非二次编码方法)
Oct 20 Javascript
js变量以及其作用域详解
Jul 18 Javascript
js实现最短的XML格式化工具实例
Mar 12 Javascript
JavaScript中的getTime()方法使用详解
Jun 10 Javascript
原生js实现addClass,removeClass,hasClass方法
Apr 27 Javascript
js实现div在页面拖动效果
May 04 Javascript
JS Attribute属性操作详解
May 19 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
May 30 Javascript
jQuery制作网页版选项卡
Jul 28 Javascript
浅谈vue-cli 3.0.x 初体验
Apr 11 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 Javascript
JS数组方法some、every和find的使用详情
Oct 05 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
ftp类(example.php)
2006/10/09 PHP
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP crc32()函数讲解
2019/02/14 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
Yii框架安装简明教程
2020/05/15 PHP
密码框显示提示文字jquery示例
2013/08/29 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
老生常谈js数据类型
2017/08/03 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
python生成excel的实例代码
2017/11/08 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
Html5页面二次分享的实现
2018/07/30 HTML / CSS
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
大学生大二自我鉴定
2013/10/28 职场文书
大四学生思想汇报
2014/01/13 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
使用Python解决图表与画布的间距问题
2022/04/11 Python