javascript中call和apply方法浅谈_javascript技巧
程序员文章站
2022-05-18 14:11:39
...
call和apply的第一个实参是要调用函数的母对象,它是调用上下文,在函数体内通过this来获得对它的引用。
例如,如果要想以对象o的方法来调用函数f,可以按如下的方式使用call和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
testFun.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.b + x + y;
}
var o = {a:1, b:2};
testFun.call(o, 10, 20);
testFun.apply(o, [10, 20]);
上述代码的执行结果为33,可以理解为 return o.a + o.b + 10 + 20
例如,如果要想以对象o的方法来调用函数f,可以按如下的方式使用call和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
testFun.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.b + x + y;
}
var o = {a:1, b:2};
testFun.call(o, 10, 20);
testFun.apply(o, [10, 20]);
上述代码的执行结果为33,可以理解为 return o.a + o.b + 10 + 20
推荐阅读
-
浅谈javascript中关于日期和时间的基础知识
-
Javascript函数内置方法call/apply实例讲解
-
javascript基于原型链的继承及call和apply函数用法分析
-
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
-
Javascript中indexOf()和lastIndexOf应用方法实例
-
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
-
javascript中的方法重载浅谈(代码)
-
Javascript中apply、call、bind的用法讲解
-
Javascript中类式继承和原型式继承的实现方法和区别之处
-
浅谈JavaScript中的apply/call/bind和this的使用