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查看对象功能代码
Apr 25 Javascript
jQuery页面滚动浮动层智能定位实例代码
Aug 23 Javascript
js判断生效时间不得大于失效时间的思路及代码
Apr 23 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 Javascript
JS实现图片产生波纹一样flash效果的方法
Feb 27 Javascript
DOM操作一些常用的属性汇总
Mar 13 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
Oct 25 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
vue事件修饰符和按键修饰符用法总结
Jul 25 Javascript
Vue实例中生命周期created和mounted的区别详解
Aug 25 Javascript
React数据传递之组件内部通信的方法
Dec 31 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 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源代码数组统计count分析
2011/08/02 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
js实现简单进度条效果
2020/03/25 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
Python装饰器用法示例小结
2018/02/11 Python
Python 打印中文字符的三种方法
2018/08/14 Python
通过shell+python实现企业微信预警
2019/03/07 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
python实现移动木板小游戏
2020/10/09 Python
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
植树节活动总结
2014/04/30 职场文书
大学生找工作求职信
2014/07/09 职场文书
狮子林导游词
2015/02/03 职场文书
复兴之路观后感
2015/06/02 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis