每个函数都包含三个非继承而来的方法:apply()方法和call()方法
都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
Function.prototype.apply()
apply() 方法调用一个函数,其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。
使用语法:
1 | func.apply(thisArg, [argsArray]) |
参数说明
- thisArg
可选的。在 func 函数运行时使用的 this 值。需要注意的是,使用的 this 值并不一定是该函数执行时真正的 this 值,如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的 this 会指向该原始值的包装对象。
- argsArray
可选的。一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数。如果该参数的值为null 或 undefined,则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象。
返回值
调用有指定this值和参数的函数的结果。
例子:
1 | window.name = 'css'; |
Function.prototype.call()
该方法的作用和 apply() 方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组或者类数组。call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。
使用语法:
1 | fun.call(thisArg, arg1, arg2, ...) |
参数说明
- thisArg
在fun函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。
- arg1, arg2, …
指定的参数列表。
返回值
返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。
例子:
1 | window.name = 'css'; |