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 相关文章推荐
解javascript 混淆加密收藏
Jan 16 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
js类式继承的具体实现方法
Dec 31 Javascript
JS弹出可拖拽可关闭的div层完整实例
Feb 13 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
jQuery网页版打砖块小游戏源码分享
Aug 20 Javascript
使用 stylelint检查CSS_StyleLint
Apr 28 Javascript
购物车前端开发(jQuery和bootstrap3)
Aug 27 Javascript
angular双向绑定模拟探索
Dec 26 Javascript
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 jQuery
微信小程序身份证验证方法实现详解
Jun 28 Javascript
Vue可自定义tab组件用法实例
Oct 24 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
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
python循环监控远程端口的方法
2015/03/14 Python
Windows下python2.7.8安装图文教程
2016/05/26 Python
python中subprocess批量执行linux命令
2018/04/27 Python
Django model序列化为json的方法示例
2018/10/16 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
可口可乐广告词
2014/03/20 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
元宵节寄语大全
2015/02/27 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
Golang生成Excel文档的方法步骤
2021/06/09 Golang
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL