apply()方法在指定this值和参数(参数以数组或类数组对象的形式存在)的情况下调用某个函数。
一、语法定义:
fun.apply(thisArg[, argsArray]);
二、参数说明:
thisArg:在fun函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null或undefined时会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。
argsArray:一个数组或者类数组对象,其中的数组元素将作为单独的参数传给fun函数。如果该参数的值为null或undefined,则表示不需要传入任何参数。从ECMAScript 5开始可以使用类数组对象。浏览器兼容性请参阅本文底部内容。
三、方法描述:
在调用一个存在的函数时,你可以为其指定一个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)范围的整数属性。例如现在可以使用NodeList或一个自己定义的类似
{'length': 2, '0': 'eat', '1': 'bananas'}
形式的对象。
需要注意:Chrome 14以及Internet Explorer 9仍然不接受类数组对象。如果传入类数组对象,它们会抛出异常。