对JavaScript中call和apply的理解

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(某个具体的方法)。

注意call方法中的参数args:

a) args是Array对象的一个实例,也就是一个数组;

b) args的个数为零(就是说不起作用)或1个;(是否可以有多个,需要确认)。

apply在这里译为“应用”,即“A对象应用B对象的某个方法”。

以上的东东可有几处本人也没有试验过,比如说:

1、“至少有一个参数”,如果没有参数回事怎样?

2、“ 第一个参数必须有且是一个对象(Object),因为就是这个家伙偷懒。”,如果第一个参数为空又如何?

3、“arg可以是任何类型,包括Array”,是否arg真的可以为任何类型,本人都是传递String类型的参数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值