有关JavaScript中call()和apply() 的一些理解


Posted in Javascript onMay 20, 2016

call()方法和apply()方法,在上层应用中用的不是很多,但在底层写JS框架的时候却常常看到。然后度娘谷哥一番,也发现好多达人写出了自己的理解和笔记,但始终还是云里雾里,于是去W3C学习了下

在W3C网上研究这两个方法的时候,看到一个词语,叫“对象冒充”,这个概念本人觉得还是挺重要的,让我对这两个方法理解起来更加直观。

call()方法,看下官方给出的例子

function sayColor(sPrefix,sSuffix) {
  alert(sPrefix + this.color + sSuffix);
};

var obj = new Object();
obj.color = "blue";

sayColor.call(obj, "The color is ", "a very nice color indeed.");

最后输出的结果是“The color is blue, a very nice color indeed.”

call()方法就是将第一个参数替换方法中的this,然后后面的参数传入该方法使用

apply()方法,同样先看个官方给出的例子

function sayColor(sPrefix,sSuffix) {
  alert(sPrefix + this.color + sSuffix);
};

var obj = new Object();
obj.color = "blue";

sayColor.apply(obj, new Array("The color is ", "a very nice color indeed."));

最后输出的结果仍然是“The color is blue, a very nice color indeed.”

其实call()方法和apply()方法可以粗略的认为是差不多的,第一个参数都是替换方法中this关键字,只是后面传给方法的传参方式不同,call是直接对应,apply是利用数组,在数组中一一对应

以上这篇有关JavaScript中call()和apply() 的一些理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 学习 几种常用方法
Jun 11 Javascript
js 触发select onchange事件代码
Mar 20 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
Jul 07 Javascript
Javascript 6里的4个新语法
Aug 25 Javascript
Javascript 跨域知识详细介绍
Oct 30 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
Vue.js实战之组件之间的数据传递
Apr 01 Javascript
jQuery复合事件结合toggle()方法的用法示例
Jun 10 jQuery
VueJs组件prop验证简单介绍
Sep 12 Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 Javascript
关于redux-saga中take使用方法详解
Feb 27 Javascript
Vue响应式原理Observer、Dep、Watcher理解
Jun 06 Javascript
Bootstrap表格和栅格分页实例详解
May 20 #Javascript
JavaScript 数组some()和filter()的用法及区别
May 20 #Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
May 20 #Javascript
AngularJS中的指令全面解析(必看)
May 20 #Javascript
浅析angularJS中的ui-router和ng-grid模块
May 20 #Javascript
javascript的理解及经典案例分析
May 20 #Javascript
JS中对象与字符串的互相转换详解
May 20 #Javascript
You might like
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
详解Python中的各种函数的使用
2015/05/24 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python虚拟环境完美部署教程
2019/08/06 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Python实现FLV视频拼接功能
2020/01/21 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
教师辞职报告范文
2014/01/20 职场文书
军神教学反思
2014/02/04 职场文书
法学专业自我鉴定
2014/02/05 职场文书
关于责任的演讲稿
2014/05/20 职场文书
新郎接新娘保证书
2015/05/08 职场文书
飞屋环游记观后感
2015/06/08 职场文书
寻找成龙观后感
2015/06/12 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫
php png失真的原因及解决办法
2021/11/17 PHP