JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别。
对于JS手册中call的解释是:
调用一个对象的一个方法,以另一个对象替换当前对象。
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从
初始的上下文改变为由 thisObj 指定的新对象。
有点类似于:call可以让改变这个函数的作用域(或者内部指针?),改变对象this指向的内容。
参照这个下面这个例子:
<input type="text" id="myText" value="input text">
<script>
function Obj(){this.value="对象!";}
var value="global 变量";
function Fun1(){alert(this.value);}
window.Fun1(); //global 变量
Fun1.call(window); //global 变量
Fun1.call(document.getElementById('myText')); //input text
Fun1.call(new Obj()); //对象!
</script>
var func=new function(){this.a="aaa"}
var myfunc=function(x){
var a="myfunc";
alert(this.a);
alert(x);
}
myfunc.call(func,"var");
感觉更加倾向于——call和apply的作用就是切换函数的对象上下文。修改内部指针,将函数的作用域发生改变,而不是替换。