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。
[b]apply方法:[/b]
语法:apply(thisObj,[argArray])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
[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]
用的比较多的情况是在类数组转化数组:[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]