JavaScript 函数 使用 call 和 apply
■知识点
call和apply是Function的原型方法,它们能够将特定函数当作一个方法绑定到指定对象上,并进行调用。具体用法如下:
function.call(thisobj, args...)
function.apply(thisobj, [args])
其中,function表示要调用的函数。参数thisobj表示绑定对象,即this指代的对象。参数args表示要传递给被调用函数的参数。call方法能接收多个参数列表,而apply方法只能接收一个数组或者伪类数组,数组元素将作为参数列表传递给被调用的函数。
■实例设计
【示例1】下面使用apply方法设计一个求最大值的函数。
function max(){ //求最大值函数
var m = Number.NEGATIVE INFINITY; //声明一个负无穷大的数值
for( var i = 0; i < arguments.length; i ++ ){ //遍历所有实参
if( arguments[i] > m ) //如果实参值大于变量m,
m = arguments[i]; //则把该实参值赋值给m
}
return m; //返回最大值
}
var a = [23, 45, 2, 46, 62, 45, 5.6, 63]; //声明并初始化数组
var m = max.apply( Object, a ); //动态调用max,绑定为Object的方法
console.log( m ); //返回63
在上面的示例中,设计定义一个函数max(),用来计算所有参数中最大值参数。首先,通过apply方法,动态调用max()函数,然后,把它绑定为Object对象的一个方法,并把包含多个值的数组传递给它。最后,返回经过max()计算后的最大数组元素。
如果使用call方法,就需要把数组所有元素全部读取出来,再逐一传递给call方法,显然这种做法不是很方便。
【示例2】使用call和apply方法可以把一个函数转换为指定对象的方法,并在这个对象上调用该方法。当函数动态调用之后,这个对象的临时方法也就不存在了。
function f() {
return "函数 f";
}
var obj = { };
f.call( obj ); //把函数f绑定为obj对象的方法
console.log( obj.f()) //再次调用该方法,则返回编译错误
■小结
call和apply方法的主要功能包括如下。
调用函数。
修改函数体内的this指代对象。
为对象绑定方法。
跨越限制调用不同类型的方法。
点击加载更多评论>>