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 相关文章推荐
JS+CSS实现简单滑动门(滑动菜单)效果
Sep 19 Javascript
JavaScript设计模式初探
Jan 07 Javascript
JavaScript中Array对象用法实例总结
Nov 29 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
Dec 24 Javascript
详解vue与后端数据交互(ajax):vue-resource
Mar 16 Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 Javascript
vue实现todolist单页面应用
Apr 11 Javascript
初学者AngularJS的环境搭建过程
Oct 27 Javascript
详解VUE2.X过滤器的使用方法
Jan 11 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
Sep 04 Javascript
微信小程序利用云函数获取手机号码
Dec 17 Javascript
在weex中愉快的使用scss的方法步骤
Jan 02 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防注
2007/01/15 PHP
php向js函数传参的几种方法
2014/08/10 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
跟老齐学Python之正规地说一句话
2014/09/28 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python3生成手写体数字方法
2018/01/30 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
python集合是否可变总结
2019/06/20 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
Python如何对XML 解析
2020/06/28 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
出国留学自荐信
2013/10/25 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
不错的求职信范文
2014/07/20 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
财产保全担保书
2015/01/20 职场文书
员工开除通知书
2015/04/25 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android