详解js中call与apply关键字的作用


Posted in Javascript onNovember 21, 2016

javascript call与apply关键字的作用

apply接受两个参数。第一个参数指定函数体内this对象的指向,第二个参数为一个带下标的集合。

call则是apply的语法糖,如果参数数量固定,则可以不用带下标的集合传第二个参数。

var func = function(a,b,c)
{
 alert(a + b + c);
}
func.apply(null,[1,2,3]);//弹出6
func.call(null,1,2,3);//弹出6

当apply与call传入的第一个参数为null时,函数体内的this会指向window。

当apply与call传入的第一个参数为null时,函数体内的this会指向window。

call与apply的用途

1、改变this的指向

var obj1 = {
 name = '刘备'
}
 
var obj2 = {
 name = '曹操'
}
var getName = function(){
 alert(this.name);
}
 
window.name = '三国';
getName();//弹出"三国"
getName.call(obj1);//弹出"刘备"
getName.call(obj2);//弹出"曹操"

所以,当在一些情况下this被莫名改变指向之后,可以使用call或apply来进行修正this的指向。

document.getElementById('div1').onclick = function(){
 alert(this.id);//div1
 var fun1 = function(){
  alert(this.id);//window.id 即undefined
 }
 fun1();//普通函数的方式调用,this指代window,相当于window.id 即 undefined
}

由于是普通函数的方式调用,所以上面的例子中,this已经变成了window。下面看看如何使用call进行修正。

document.getElementById('div1').onclick = function(){
 alert(this.id);
 var fun1 = function(){
  alert(this.id);
 }
 fun1.call(this);//强制函数内的this为外层的this,
}

2、调用其他对象的函数

示例1:

var obj1 = {
 a:1,
 b:2,
 add:function()
 {
  return this.a + this.b;
 }
}
var obj2 = {
 a:1,
 b:2,
}
var result = obj1.add.call(obj2);//用obj1的函数来计算obj2的两个属性的和
alert(result);//输出3

示例2:借用构造函数实现类似继承的效果

var A = function(name)
{
 this.name = name;
};
var B = function(){
 A.apply(this,arguments)
}
B.prototype.getName = function(){
 return this.name;
}
var b = new B('刘备');
alert(b.getName());

以上就是本文的内容,有问题可以和小编联系,谢谢对三水点靠木的支持!

Javascript 相关文章推荐
JavaScript小技巧 2.5 则
Sep 12 Javascript
Javascript核心读书有感之词法结构
Feb 01 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
Nov 17 Javascript
jQuery实现Select左右复制移动内容
Aug 05 Javascript
原生JS查找元素的方法(推荐)
Nov 22 Javascript
jquery实现多次上传同一张图片
Jan 09 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
Jun 29 Javascript
jQuery实现简单的下拉菜单导航功能示例
Dec 07 jQuery
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 Javascript
node-red File读取好保存实例讲解
Sep 11 Javascript
jQuery开发仿QQ版音乐播放器
Jul 10 jQuery
微信小程序购物商城系统开发系列-目录结构介绍
Nov 21 #Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
Nov 21 #Javascript
全面解析node 表单的图片上传
Nov 21 #Javascript
利用fecha进行JS日期处理
Nov 21 #Javascript
Bootstrap Modal遮罩弹出层(完整版)
Nov 21 #Javascript
Bootstrap Modal遮罩弹出层代码分享
Nov 21 #Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 #Javascript
You might like
农民和部队如何穿矿
2020/03/04 星际争霸
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
Prototype Function对象 学习
2009/07/12 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
python网络编程之读取网站根目录实例
2014/09/30 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
Python异常处理操作实例详解
2018/05/10 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
python中栈的原理及实现方法示例
2019/11/27 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
python ssh 执行shell命令的示例
2020/09/29 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
联想台湾官网:Lenovo TW
2018/05/09 全球购物
财务会计专业毕业生自荐信
2013/10/19 职场文书
营业员演讲稿
2013/12/30 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
怎样填写就业意向
2014/04/02 职场文书
文体活动总结范文
2014/05/05 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS
JavaScript实现栈结构详细过程
2021/12/06 Javascript