首先我们要知道,JS中函数调用共有四种方法。call()就是其中一种。我先简单的的说明以下四种方法:
我们先定义一个函数:
function test(){
/**do something**/
}
1)第一种,也就是最常见的调用方法:
test();
2)第二种:对象调用
我们需要把定义的函数放到一个对象里面(obj)
var obj={
test:function (){
/**do something**/
}
}
调用:
obj.test();
3)第三种:构造函数调用
var tmp = new test();
4)第四种:使用call()或者applay()
这种方法调用的时候必须传递一个参数,只要不空着即可。
test.call(null)
其实,以上调用方式,隐含的传递了一个变量:this。
有点面向对象基础的人都知道,this是一个“指针”,对于js来说,this指向了方法的作用域。而call()的作用,恰恰就是改变这个作用域(this)。也就是call(null)中必须的那个参数成为了新的this。
再打个比方,call()就像现实生活中的打电话,首先打电话前要拨号,这个号码就相当于this,必须有号码才有可能拨通电话。而拨打不同的号码,即call(null)的参数值不同,接电话的人(作用域)也不同。而给接电话方传递的信息可以通过call(null,param,param,param....)的其他不必须参数传递,接电话的人也可以通过函数的return回复消息!