快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记娱乐下载官方平台_机器人论坛



我们可以将call和apply看做是某个工具的措施,经由过程调用措施的形式来间接调用函数。call和apply的第一个实参是要调用函数的母工具,它是调用高低文,在函数体内经由过程this来得到对它的引用。

例如,假如要想以工具o的措施来调用函数f,可以按如下的要领应用cal和记娱乐下载官方平台l和apply措施:

f.call(o);

f.apply(o);

可以按如下的代码来理解:

o.m = f;  //将f存储为o的临时措施

o.m();  //调用这个临时措施

delete o.m;  //将这个临时措施删除

来个示例吧。

function testFun(){

return this.a + this.b;

}

var o = {a:1, b:2};

testFun.call(o);  //3

testF和记娱乐下载官方平台un.apply(o);  //3

上述代码履行的结果均为3,可以理解为return o.a + o.b。

斟酌一个问题,假如call和apply措施的第一个实参为null或者undefined为如何?来看下面的一个例子:

var a = 10, b = 20;

function testFun(){

return this.a + this.b;

}

testFun.call();

testFun.apply();

上述和记娱乐下载官方平台代码履行的结果均为和记娱乐下载官方平台30。这是由于call和apply的第一个实参假如传入的是null或者undefined,则会被全局工具代替。

那call和apply这两个措施有什么差别呢?

对付call措施来说,第一个调用高低文实参之后的所有实参便是要传入待调用函数的值。比如,以工具o的措施的形式调用函数f,并传入两个参数,就可以应用如下的代码:

f.call(o, 1, 2);

而apply措施则将第一个实参之后的所有实参放入一个数组内,

f.apply(o, [1, 2]);

来个例子吧

function testFun(x, y){

return this.a + this.y + a + b;

}

var o = {a:1, b:2};

testFun.call(o, 10, 20);

testFun.apply(o, [10, 20]);

上述代码的履行结果为33,可以理解为 return o.a + o.b + 10 + 20和记娱乐下载官方平台

您可能还会对下面的文章感兴趣: