apply 与 call 在js 当中主要是改变this指向
例如当我们执行 一个方法
var numbers = [5, 6, 2, 3, 7];
求最大可以写成这样
var max = Math.max.apply(this, numbers);
比如大家都知道字符串会有split方法 而数组没有对不对 我们用apply就可以把split方法运用到数组上面请看
var s="wujianglong";
var s1=["wu","jiang","long"];
s.split("") // ["w", "u", "j", "i", "a", "n", "g", "l", "o", "n", "g"]
s1.split("") //VM418:1 Uncaught TypeError: s1.split is not a function
可见数组是没有这个方法的 这时候如果想要有 当然一般都不这么做 我只是做个比喻 任何方法都是可以这样去做
s.split.apply(s1,["wu","jiang","long"])
这样就有结果了
var func1 = function(arg1, arg2) {};
就可以通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用
比较简单的理解方式:
猫吃鱼,狗吃肉,奥特曼打小怪兽。
有天狗想吃鱼了
猫.吃鱼.call(狗,鱼)
狗就吃到鱼了
猫成精了,想打怪兽
奥特曼.打小怪兽.call(猫,小怪兽)
就这样记住了。