在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

最新文章

  1. 《你不知道的JavaScript》整理(一)——作用域、提升与闭包
  2. JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册
  3. Visual C++ 的代码折叠
  4. nyoj 71 独木舟上的旅行(贪心专题)
  5. crond: unrecognized service 无crond解决办法
  6. 例题6-7 Trees on the level ,Uva122
  7. 将选择的图片显示在listview中,并显示filename,path和type
  8. Adblock Plus完美过滤视频网站广告、无黑屏!及屏蔽非本站脚本的Adblock Plus过滤器语法之探讨
  9. c++中&和&&有什么差别
  10. SpringMVC的视图解析器
  11. Tomcat的class加载的优先顺序
  12. 使用docker 解决一个小问题,你也可能用的到
  13. 《C++程序设计语言(英文第四版)》【PDF】下载
  14. JSON 的数据转换格式(DataTable或DataSet) -善良公社项目
  15. [20181015]为什么是3秒.txt
  16. python -- 约束、异常处理、MD5
  17. Java中递归和循环的优劣
  18. 探索未知种族之osg类生物---起源
  19. 热修复 AndFix 阿里 apkpatch MD
  20. 利用cmd代码一次性提取电脑登陆过的wifi密码到桌面

热门文章

  1. CSS 属性 - 伪类和伪元素的区别
  2. Android--Apache HttpClient
  3. 初识 Android
  4. 卸载openfire
  5. Masonry第三方代码约束
  6. iOS开发--隐藏(去除)导航栏底部横线
  7. 算法积累:解决如何获取指定文件夹路径或者文件路径下所有子文件后缀为.h .m .c的文本的行数
  8. Android keystore 密码忘记了的找回办法
  9. javascript 如何访问 action或者controller 传给 jsp 页面的值
  10. Linux Shell 06 数学运算