对JavaScript中call和apply的理解

发布于 2022-09-30 19:42:30 字数 1321 浏览 13 评论 0

对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类型的参数。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文