博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对call() apply() 方法的简单理解
阅读量:4605 次
发布时间:2019-06-09

本文共 1615 字,大约阅读时间需要 5 分钟。

  真的是非常简单的理解,我知道的并不多,在网上查找了很多的资料,还是只能了解一点皮毛,下面来整理出来,方便以后深入的去学习,也是对目前知道的知识点的巩固。

整理一些网上的经典解答:

1.一句话区分call 和apply

obj1.call(obj2,arg1,arg2,arg3) == obj1.apply(obj2,arguments) == obj2.foo(arg1,arg2,arg3)

thisA.functionA.apply(thisB,[arg1,arg2,...]) == thisA.functionA.call(thisB,arg1,arg2,...) == thisB.functionA(arg1,arg2,...)

  • obj2如果为空则this指向window对象
  • call 和apply的区别在于:call接的参数是固定的,按照顺序输入。apply接收的参数是一个数组。
  • 什么时候使用call或者apply?当参数是固定的时候一般使用call,如果参数不确定或者参数是一个数组时需要使用apply.
  • 上面的话理解成 obj2调用obj1的方法。对象thisB调用thisA的functionA方法

2.理解obj2如果为空则this指向window

1 obj1.call(obj2,a,b);2 //等价于3 if(obj2!==null){4     obj1.this=obj2;5     }else{6     obj1.this=window;7 }8 obj1(a,b);

3.摘自javascript高级程序书本中的代码

1 var values = [1,2,3,4,5,6,9];2 var max = Math.max.apply(Math,values);3 console.log(max);//9

这里Math当作apply()的第一个参数我无法理解,max()方法是Math对象下面的一个方法,values为一个数组对象,需要去借用Math对象下面的max()方法。

1 var values = [1,2,3,4,5,6,9];2 var max = Math.max.apply(Array,values);3 console.log(max);//9
1 var values = [1,2,3,4,5,6,9];2 var max = Math.max.apply(this,values);3 console.log(max);//9

发现用Array或者this代替 Math尽然都会输出9.

4.一个例子

call和apply可以用来重新定义函数的执行环境,也就是this的指向

1 function changgeStyle(attr,value){2             this.style[attr] = value;3         }4 var box = document.getElementById("box");5 window.changgeStyle.call(box,"height","200px");

changgeStyle()为window对象下面的方法,那么如何把window对象的方法转移到box对象上呢,通过动态的改变this的指向,也就是相当于借用window.changgeStyle()的方法,通过call方法把 window.changgeStyle("height","200px")变成了box.changgeStyle("height","200px").

 

总结:就是自己没有的属性或者方法,通过改变函数的执行环境(this的指向),或者通俗点来说就是借用别人的属性或者方法来执行操作。

转载于:https://www.cnblogs.com/yewenxiang/p/6166500.html

你可能感兴趣的文章
赛马题(转)
查看>>
HDU 1907 (博弈) John
查看>>
JS中反斜杠和单双引号的配合使用效果
查看>>
一次项目中的错误
查看>>
ubuntu c++ 关机 重启 挂起 API
查看>>
Oracle Sqlplus Note
查看>>
设计模式之策略模式(Strategy Pattern)
查看>>
手写符合Promise/A+规范的Promise
查看>>
Python time和datetime模块
查看>>
JPA、JTA、XA相关索引
查看>>
查询语句的练习
查看>>
快速切题 sgu103. Traffic Lights 最短路 难度:1
查看>>
2010年5月11日日志
查看>>
产品需求文档(PRD)的写作
查看>>
网页高度计算方法
查看>>
Java EE的map
查看>>
webdriver.py--解说
查看>>
windows 下配置Eclipse che
查看>>
SearchSploit
查看>>
2017.3.2
查看>>