apply和call
2017-03-15 本文已影响65人
古朋
介绍
有编程开发经验的都知道函数有作用域这种东西,JavaScript中的函数中的亦是如此。但是想要更改该函数的作用域,最方便的方式就是通过apply和call方法
用法
apply和call在功能上是相同的,但是唯一的不同之处在于提供参数的方式。
-
apply使用参数数组而不是一组参数列表
window.color = "red"; var a = { color : "blue" }; var x = function(){ alert(this.color+"--"+arguments.length); } x();//red is 0 x.apply(window);//red is 0 x.apply(a,[1,2,3]);//blue is 3
-
call使用时参数列表
window.color = "red"; var a = { color : "blue" }; var x = function(){ alert(this.color+" is "+arguments.length); } x();//red is 0 x.call(window);//red is 0 x.call(a,1,2,3);//blue is 3
1.apply语法
fun.apply(thisArg[, argsArray])
参数
-
thisArg
在 fun 函数运行时指定的
this
值。
需要注意的是,指定的this
值并不一定是该函数执行时真正的this
值,如果这个函数处于非严格模式下,则指定为null
或undefined
时会自动指向
全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this
会指向该原始值的自动包装对象。 -
argsArray
一个数组或者类数组对象,其中的数组元素将作为单独的参数传给
fun
函数。如果该参数的值为null
或 {{jsxref("Global_Objects/undefined", "undefined")}},则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象。浏览器兼容性请参阅本文底部内容。
2.call语法
fun.call(thisArg[, arg1[, arg2[, ...]]])
参数
-
thisArg
在fun函数运行时指定的
this
值。需要注意的是,指定的this
值并不一定是该函数执行时真正的this
值,如果这个函数处于非严格模式下,则指定为null
和undefined
的this值会自动指向
全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this
会指向该原始值的自动包装对象。 -
arg1, arg2, ...
指定的参数列表。