JavaScript apply方法

JavaScript apply方法教程

JavaScript 中,apply() 方法调用一个具有给定 this 值的 函数,以及作为一个 数组(或 类似数组对象)提供的参数。

call() 方法的作用和 apply() 方法类似,区别就是 call() 方法接受的是参数列表,而 apply() 方法接受的是一个参数数组。

JavaScript apply详解

语法

func.apply(thisArg, [argsArray]);

参数

参数 描述
thisArg 可选的。在 function 函数运行时使用的 this 值。请注意,this 可能不是该方法看到的实际值:如果这个函数处于 非严格模式 下,则指定为 nullundefined 时会自动替换为指向全局对象,原始值会被包装。
argsArray 可选的。一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数。如果该参数的值为 null 或 undefined,则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象。

返回值

调用有指定 this 值和参数的函数的结果。

说明

在调用一个存在的函数时,你可以为其指定一个 this 对象。 this 指当前对象,也就是正在调用这个函数的对象。 使用 apply, 你可以只写一次这个方法然后在另一个对象中继承它,而不用在新对象中重复写该方法。

apply 与 call() 非常相似,不同之处在于提供参数的方式。apply 使用参数数组而不是一组参数列表。apply 可以使用数组字面量(array literal),如 fun.apply(this, [‘eat’, ‘bananas’]),或数组对象, 如 fun.apply(this, new Array(‘eat’, ‘bananas’))。

你也可以使用 arguments 对象作为 argsArray 参数。 arguments 是一个函数的局部变量。 它可以被用作被调用对象的所有未指定的参数。 这样,你在使用 apply 函数的时候就不需要知道被调用对象的所有参数。 你可以使用 arguments 来把所有的参数传递给被调用对象。 被调用对象接下来就负责处理这些参数。

从 ECMAScript 第 5 版开始,可以使用任何种类的类数组对象,就是说只要有一个 length 属性和(0…length-1)范围的整数属性。例如现在可以使用 NodeList 或一个自己定义的类似 {‘length’: 2, ‘0’: ‘eat’, ‘1’: ‘bananas’} 形式的对象。

注意

Chrome 14 以及 Internet Explorer 9 仍然不接受类数组对象。如果传入类数组对象,它们会抛出异常。

案例

apply调用系统函数

使用 apply 实现调用系统函数

<!DOCTYPE html> <html> <head> <title>JavaScript apply 方法</title> <script type="text/javascript"> console.log("嗨客网(www.haicoder.net)"); const numbers = [5, 6, 2, 3, 7]; const max = Math.max.apply(null, numbers); console.log("max =", max); const min = Math.min.apply(null, numbers); console.log("min =", min); </script> </head> </html>

程序运行后,控制台输出如下:

50_javascript apply.png

我们首先定义了一个 numbers 数组,接着,我们调用系统函数 Math.max 并使用该函数调用 apply 第一个参数传入 null,第二个参数传入 numbers 数组,实现了求出了该数组中的最大值。

使用,同样的方法,我们使用 apply 实现了求出了数组的最小值。

apply添加数组

使用 apply 实现在一个数组中添加另一个数组

<!DOCTYPE html> <html> <head> <title>JavaScript apply 方法</title> <script type="text/javascript"> console.log("嗨客网(www.haicoder.net)"); var array = ['Hello', 'HaiCoder']; var elements = [0, 1, 2]; console.log("array =", array); console.log("elements =", elements); array.push.apply(array, elements); console.log("array =", array); </script> </head> </html>

程序运行后,控制台输出如下:

51_javascript apply.png

我们首先定义了两个数组,一个 array,一个 elements,接着,我们使用 array.push 并且调用 apply 方法实现了将 elements 数组的所有元素添加到了 array 数组中。

JavaScript apply方法总结

在 JavaScript 中,apply() 方法调用一个具有给定 this 值的函数,以及作为一个数组(或 类似数组对象)提供的参数。