js中call是调用一个对象的一个方法,以另一个对象替换当前对象。call方法是Function类原型上的一个公共方法,所以要用这个。
标准解释:call方法是将一个对象的方法在另一个对象的上下文环境中执行。详细解释:你的例子中,myFun.call(myObject, 13, 3, 95)执行时是这样的:
1. 调用myFun函数
2. 将13,3,95三个参数传递给它(你的myFun方法中没有处理这些参数的代码,所以传了也没有用)
3. 将myFun函数中的所有this用myObject代替(同样,你的myFun函数中没有使用this,所以执行结果和直接调用myFun()是一样的)
修改一下你的例子,帮助你理解:
function myFun(p1, p2, p3)
{
this.para1 = p1
this.para2 = p2
this.para3 = p3
}
var myObject = new Object()
alert(myObject.para1) //显示undefined
myFun.call(myObject,13,3,95)/*执行的时候,myFun方法中的this全部用myObject对象代替,所以在这个例子中,执行myFun方法和直接写下面的语句效果是一样的:
myObject.para1 = 13
myObject.para2 = 3
myObject.para3 = 95
*/
alert(myObject.para1) //显示13
JavaScript中的每一个function对象都会有call和apply方法定义:
apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments)即A对象应用B对象的方法。
call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2)即A对象调用B对象的方法
从定义中可以看出,call和apply都是调用一个对象的一个方法,用另一个对象替换当前对象。而不同之处在于传递的参数,apply最多只能有两个参数——新this对象和一个数组argArray,如果arg不是数组则会报错TypeError;
call则可以传递多个参数,第一个参数和apply一样,是用来替换的对象,后边是参数列表。