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实现检测浏览器及版本的脚本代码
Jan 22 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
May 04 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
Nov 04 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
Nov 29 Javascript
js 判断控件获得焦点的示例代码
Mar 04 Javascript
javascript数组遍历的方法实例分析
Sep 13 Javascript
详解微信小程序开发之城市选择器 城市切换
Jan 17 Javascript
基于LayUI实现前端分页功能的方法
Jul 22 Javascript
微信小程序request请求后台接口php的实例详解
Sep 20 Javascript
react.js组件实现拖拽复制和可排序的示例代码
Aug 20 Javascript
微信小程序 调用微信授权窗口相关问题解决
Jul 25 Javascript
es6函数name属性功能与用法实例分析
Apr 18 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
星际RPG字典
2020/03/04 星际争霸
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
番茄的表单验证类代码修改版
2008/07/18 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
python实现数据分析与建模
2019/07/11 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
资料员的岗位职责
2013/11/20 职场文书
积极分子思想汇报
2014/01/04 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
置业顾问岗位职责
2015/02/09 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
hive数据仓库新增字段方法
2022/06/25 数据库