对JavaScript中call和apply的理解

开发 前端
看了几篇介绍JS中call和apply的文章,总觉得不是很好懂,这里写下我自己的理解,供网友们参考。

51CTO推荐专题:JavaScript学习笔记 有问有答

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

【编辑推荐】

  1. 16款***的JavaScript框架
  2. 如何在JavaScript中处理大量数据
  3. 再谈JavaScript图片预加载技术
  4. 示例:JavaScript中的后续传递风格
  5. 浅析JavaScript继承方式
责任编辑:陈贻新 来源: 译言网
相关推荐

2021-06-18 07:16:17

JavaScript apply()方法call()方法

2021-12-05 08:27:56

Javascript 高阶函数前端

2017-10-10 14:36:07

前端Javascriptapply、call、

2015-03-02 09:22:09

Javascript函数用法apply

2021-11-30 06:56:58

CallApply函数

2024-03-15 08:21:17

bindJavaScrip函数

2016-09-18 20:53:16

JavaScript闭包前端

2011-08-15 12:55:54

SQL ServerOUTER APPLYCROSS APPLY

2009-06-24 11:12:17

callerJavascript

2009-06-12 18:54:46

异常程序开发

2020-08-23 11:32:21

JavaScript开发技术

2012-12-25 09:38:41

JavaScript设计模式

2017-07-26 17:10:24

前端JavascriptThis

2020-08-31 07:19:57

MonoFlux Reactor

2021-06-09 07:01:30

前端CallApply

2022-08-16 09:03:01

JavaScript前端

2020-02-20 14:00:15

JavaScript原型原型链

2021-09-07 08:33:27

JavaScript TypeScript 函数

2018-05-10 14:20:18

前端JavaScript深拷贝

2020-12-30 07:26:20

RedisSortedSet内存包
点赞
收藏

51CTO技术栈公众号