Javascript中call和apply的区别与详解
在js中call和apply它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别,下面我来给大家介绍一下call和apply用法;
在web前端开发过程中,我们经常需要改变this指向,通常我们想到的就是用call方法;
说明:a.call(b,arg1,arg2..)就是a对象的方法应用到b对象上
a.apply(b,[arg1,arg2,....])也是a对象的方法应用到b对象上,只不过是第二个参数不一样而已;
例如:
function add(a,b)
{
alert(a+b);
}
function reduce(a,b)
{
alert(a-b);
}
add.call(reduce,1,5) //将add方法运用到reduce,结果为6
function add(a,b)
{
alert(a+b);
}
function reduce(a,b)
{
alert(a-b);
}
add.apply(reduce,[1,5]) //将add方法运用到reduce,结果为6
JS里面实现继承和改变this的引用一样也是通过call和apply
例如
function Animal(name)
{
this.name=name;
this.showName=function()
{
alert(this.name)
}
}
function Cat(name)
{
Animal.call(this,name); //将Animal应用到Cat上,因此Cat拥有了Animal的所有属性和方法
}
var cat = new Cat(“Black Cat”);
cat.showName(); //浏览器弹出Black Cat
改变this的引用
function Animal()
{
this.name=”animal”;
this.showName=function()
{
alert(this.name)
}
}
function Cat()
{
this.name=”cat”;
}
var animal = new Animal();
var cat = new Cat();
animal.showName(); //结果为animal
animal.showName.call(cat); //原本cat没有showName方法,但是通过call方法将animal的showName方法应用到cat上,因此结果为cat
最新文章
- 《你不知道的JavaScript》整理(一)——作用域、提升与闭包
- JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册
- Visual C++ 的代码折叠
- nyoj 71 独木舟上的旅行(贪心专题)
- crond: unrecognized service 无crond解决办法
- 例题6-7 Trees on the level ,Uva122
- 将选择的图片显示在listview中,并显示filename,path和type
- Adblock Plus完美过滤视频网站广告、无黑屏!及屏蔽非本站脚本的Adblock Plus过滤器语法之探讨
- c++中&;amp;和&;amp;&;amp;有什么差别
- SpringMVC的视图解析器
- Tomcat的class加载的优先顺序
- 使用docker 解决一个小问题,你也可能用的到
- 《C++程序设计语言(英文第四版)》【PDF】下载
- JSON 的数据转换格式(DataTable或DataSet) -善良公社项目
- [20181015]为什么是3秒.txt
- python -- 约束、异常处理、MD5
- Java中递归和循环的优劣
- 探索未知种族之osg类生物---起源
- 热修复 AndFix 阿里 apkpatch MD
- 利用cmd代码一次性提取电脑登陆过的wifi密码到桌面