实例理解 call、apply 改变上下文

作者:vkvi 来源:ITPOW(原创) 日期:2010-7-28
function f1()
{
    this.m = "f1的m";
}
function f2()
{
    alert(this.m);
}
f2(); // 显示 undefined
var of1 = new f1();
f2.call(of1); // 显示 f1的m
f2.apply(of1); // 显示 f1的m

f2() 这句的作用域是 window,在全局中没有 this.m,所以它是 undefined。

f2.call(of1) 和 f2.apply(of1); 改变了上下文为 of1,所以它显示 f1的m。

call 与 apply 的功能是相同的,只是在调用参数上方法有所不同,一个是直接写参数,一个是参数用数组。

汇总一下示例如下:

this.m = "window的m";
function f1()
{
    this.m = "f1的m";
}
function f2(a, b)
{
    alert(this.m);
}
f2(); // 显示 window的m
var of1 = new f1();
f2.call(of1, 1, 2); // 显示 f1的m
f2.apply(of1, [1, 2]); // 显示 f1的m

相关阅读

相关文章