有关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 相关文章推荐
比较简单实用的使用正则三种版本的js去空格处理方法
Nov 18 Javascript
JavaScript 事件的一些重要说明
Oct 25 Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 Javascript
Vue.js学习之计算属性
Jan 22 Javascript
JS实现点击Radio动态更新table数据
Jul 18 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
Nov 21 Javascript
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
vue中v-model的应用及使用详解
Jun 27 Javascript
vue实现的组件兄弟间通信功能示例
Dec 04 Javascript
微信小程序实现下拉框功能
Jul 16 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
Nov 01 Javascript
详解为什么Vue中不要用index作为key(diff算法)
Apr 04 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调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
php跨服务器访问方法小结
2015/05/12 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
php之可变变量的实例详解
2017/09/12 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
Python解释执行原理分析
2014/08/22 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
django API 中接口的互相调用实例
2020/04/01 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
预备党员党课思想汇报
2014/01/13 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
六五普法心得体会2016
2016/01/21 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL