有关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选中select控件 无法设置selected的解决方法
Sep 01 Javascript
jQuery动态地获取系统时间实现代码
May 24 Javascript
Ajax异步提交表单数据的说明及方法实例
Jun 22 Javascript
Javascript控制input输入时间格式的方法
Jan 28 Javascript
3个可以改善用户体验的AngularJS指令介绍
Jun 18 Javascript
js实现汉字排序的方法
Jul 23 Javascript
纯javascript实现图片延时加载方法
Aug 21 Javascript
jQuery给元素添加样式的方法详解
Dec 30 Javascript
jQuery插件formValidator实现表单验证
May 23 Javascript
微信小程序 获取设备信息 API实例详解
Oct 02 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 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
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
javascript 写类方式之八
2009/07/05 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
Html5定位终极解决方案
2020/02/05 HTML / CSS
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
政治学专业毕业生求职信
2014/08/11 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
Golang: 内建容器的用法
2021/05/05 Golang