call()和apply()

本文详细介绍了JavaScript中call和apply方法的使用方式及其区别。这两种方法主要用于动态改变函数调用时的this指向,适用于类数组转数组等场景。call方法需要逐个传入参数,而apply则接收一个参数数组。
call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。

用的比较多的情况是在类数组转化数组:[url]http://wangjingyi.iteye.com/blog/2197626[/url]

[b]call方法:[/b]
语法:call(thisObj,Object)
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

function sayColor(sPrefix,sSuffix) {
alert(sPrefix + this.color + sSuffix);
};

var obj = new Object();
obj.color = "blue";
//第二个和第三个参数是字符串,最终弹出:The color is blue, a very nice color indeed
sayColor.call(obj, "The color is ", "a very nice color indeed.");

[b]apply方法:[/b]
语法:apply(thisObj,[argArray])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

function sayColor(sPrefix,sSuffix) {
alert(sPrefix + this.color + sSuffix);
};
var obj = new Object();
obj.color = "blue";
//第二个参数是由两个字符串构成的数组,最终弹出:The color is blue, a very nice color indeed
sayColor.apply(obj, new Array("The color is ", "a very nice color indeed."));


[color=blue][size=small]
共同点:作用完全一样
不同点:接受参数的方式不太一样,call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。[/size][/color]

[url]http://www.zhihu.com/question/20289071[/url]
[url]http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值