call和apply没有什么大的区别,两者的作用都是:改变对象的this指向的内容。
他们的写法不同,如下:
func.call(func1, var1, var2, var3);
func.apply(func1, [var1, var2, var3]);
从写法中可以看出,使用apply的好处是,可以把当前函数的arguments对象作为apply的第二个参数传进去。
下面我们拿call来做个例子:
1 <input type="text" id="myText" value="input text"/> 2 <script> 3 function obj(){ 4 this.value = '对象'; 5 } 6 var value = 'global对象'; 7 function fun1(){ 8 console.log(this.value); 9 } 10 //看看以下结果是啥? 11 window.fun1(); //global对象 12 fun1.call(window); // global对象 13 fun1.call(document.getElementById('myText')); // input text 14 fun1.call(new obj()); //对象 15 16 </script>