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 相关文章推荐
window.opener用法和用途实例介绍
Aug 19 Javascript
jquery中常用的函数和属性详细解析
Mar 07 Javascript
JS实现动态给图片添加边框的方法
Apr 01 Javascript
jquery 插件实现瀑布流图片展示实例
Apr 03 Javascript
JQuery悬停控制图片轮播——代码简单
Aug 05 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
JavaScript之filter_动力节点Java学院整理
Jun 28 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
Aug 23 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
element上传组件循环引用及简单时间倒计时的实现
Oct 01 Javascript
Node配合WebSocket做多文件下载以及进度回传
Nov 07 Javascript
在vue-cli中引入lodash.js并使用详解
Nov 13 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控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
详解node中创建服务进程
2017/05/09 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
浅谈vue的第一个commit分析
2020/06/08 Javascript
解读! Python在人工智能中的作用
2017/11/14 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
python实现简单颜色识别程序
2020/02/19 Python
django项目中新增app的2种实现方法
2020/04/01 Python
Python实现一个优先级队列的方法
2020/07/31 Python
新闻专业个人求职信
2013/12/19 职场文书
国窖1573广告词
2014/03/21 职场文书
个人工作主要事迹
2014/05/08 职场文书
小王子读书笔记
2015/06/29 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书