call([thisObj[,arg1[, arg2[, [,.argN]]]]])
- thisObj
- 可选项。将被用作当前对象的对象。
- arg1, arg2, , argN
- 可选项。将被传递方法参数序列。
-
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 -
这东西JS文档里我没找到怎么调用这个方法,功能是 调用一个对象的一个方法 自己的参数只有方法的所有者对象和要调用的方法参数,
-
查过资料才知道,Array.prototype.slice.call 是这么调用,只要 typesof fn ==="function" 的 fn类型都有 call 方法
-
- call 方法以另一个对象替换当前对象
- thisObj 可选项。将被用作当前对象的对象。
- 这就是说:Array.prototype.slice.call(arguments,0) 这句里,就是把 arguments 当做当前对象
- 也就是说 要调用的是 arguments 的slice 方法,后面的 参数 0 也就成了 slice 的第一个参数slice(0)就是获取所有
<script type="text/javascript">//<![CDATA[
function classA() {
this.name='bluedestiny';
this.show = function () {
alert(this.name);
}
}
function classB() {
this.name = 'never-online';
}
var objA = new classA();
var objB = new classB();
objA.show.call(objB);
//]]></script>
apply([thisObj[,argArray]])
参数
- thisObj
- 可选项。将被用作当前对象的对象。
- argArray
- 可选项。将被传递给该函数的参数数组。
说明
呵呵,这么火星的功能,实在是少见啊,估计也就是JS里
两者的区别: 对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入