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监控IE火狐浏览器关闭、刷新、回退、前进事件
Jul 23 Javascript
jquery中push()的用法(数组添加元素)
Nov 25 Javascript
JQuery实现样式设置、追加、移除与切换的方法
Jun 11 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
Jun 12 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
Aug 02 Javascript
DropDownList实现可输入可选择(两种版本可选)
Dec 07 Javascript
angular使用bootstrap方法手动启动的实例代码
Jul 18 Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 Javascript
jQuery实现可兼容IE6的遮罩功能详解
Sep 19 jQuery
在vue中使用Autoprefixed的方法
Jul 27 Javascript
element UI upload组件上传附件格式限制方法
Sep 04 Javascript
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
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初始化对象和析构函数的简单实例
2014/03/11 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
使用python实现链表操作
2018/01/26 Python
python实现爬山算法的思路详解
2019/04/09 Python
python小程序实现刷票功能详解
2019/07/17 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
专业毕业生个性的自我评价
2013/10/03 职场文书
财务会计专业毕业生自荐信
2013/10/19 职场文书
社会实践心得体会
2014/01/03 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
教育合作协议范本
2014/10/17 职场文书
骨干教师事迹材料
2014/12/17 职场文书
校长一岗双责责任书
2015/05/09 职场文书
歌咏比赛主持词
2015/06/29 职场文书