1、相同点:
a) 产生的效果或作用完全相同
b)至少有一个参数
c)第一个参数必须有且是一个对象(Object),因为就是这个家伙很懒。
2、不同点:传递参数方式
前提:
1、两个对象:A和B
2、B有一个方法(这里用Function代替)
3、B的方法(Function)有两种参数传递方式,但该方法产生的结果一样
一种是除第一个参数外,其余的参数都打包进一个数组内,即B.Function.apply(A, args)
另一种是所有的参数都已各自的形式单独存在(包括第一个参数),即B.Function.call(A, arg, arg, ...)
4、A想拥有和B同样的方法,但不想自己单独创建,即只想借用别人现成的东西(好赖皮)
具体说明:
1、B.Function.call(A, arg, arg),这个例子是讲A对象“调用”B对象的Function(某个具体的方法)
注意call方法中的参数arg:
a)arg的个数为零或多个
b)arg可以是任何类型,包括Array(尚未试过)
call在这里译为“调用”,在JS中可以理解为“A对象调用B对象的某个方法”
2、B.Function.apply(A, args),这个例子是讲A对象“应用”B对象的Function(某个具体的方法)
注意apply方法中的参数args:
a)args是Array对象的一个实例,也就是说是一个数组
b)args的个数为零(也就是说不起作用)或1个(是否可以有多个,有待确认)
apply在这里译为“应用”,即“A对象应用B对象的某个方法”
转自 51cto.com 佚名 http://developer.51cto.com/art/201103/250108.htm