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 相关文章推荐
jQuery实现的立体文字渐变效果
May 17 Javascript
juqery 学习之四 筛选过滤
Nov 30 Javascript
javascript时区函数介绍
Sep 14 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
javascript事件函数中获得事件源的两种不错方法
Mar 17 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
第一篇初识bootstrap
Jun 21 Javascript
Angular路由简单学习
Dec 26 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
js实现表格筛选功能
Jan 18 Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 Javascript
vue cli 3.x 项目部署到 github pages的方法
Apr 17 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实现多级树型菜单
2006/10/09 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
PHP的反射机制实例详解
2017/03/29 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
js实现查询商品案例
2020/07/22 Javascript
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python常规方法实现数组的全排列
2015/03/17 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
python中os模块详解
2016/10/14 Python
Python实现选择排序
2017/06/04 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
《陋室铭》教学反思
2014/02/26 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
委托培训协议书
2014/11/17 职场文书
继承公证书格式
2015/01/26 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书