javascript - 关于apply()与call()的问题
本文介绍了javascript - 关于apply()与call()的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
function sum(num1,num2) {
return num1 + num2;
}
function callSum1(num1,num2) {
return sum.apply(this,arguments);
}
function callSum2(num1,num2) {
return sum.apply(this,[num1,num2]);
}
alert(callSum1(10,10));
alert(callSum2(10,10));
//call()例子就省略了
问:
1.sum.apply(this,arguments)说的是对象sum调用apply方法,this指的是callSum()与sum()都是同一个作用域运行,arguments指的就是sum1,sum2?
2.apply()与call()的在项目中应用价值是什么呢?
解决方案
楼上写的真复杂:)
听我讲讲,题主疑惑的地方
1:
function callSum1(num1,num2) {
return sum.apply(this,arguments); // 这里的arguments和下面的[num1,num2]是同一个意思
}
function callSum2(num1,num2) {
return sum.apply(this,[num1,num2]);
}
arguments 是一个类似数组的对象, 对应于传递给函数的参数。arguments对象是所有函数中可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。
PS:this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
2、call和apply应用价值(存在的意义):
作用都是为了改变函数运行时上下文而存在的。 即改变函数体内部this的指向
"说白点,a有xx方法,b没有。b可以问a借!"(这tm不就是继承嘛~)
call和apply不同点:
接受参数方式不一样。
如下:
call接受的是连续参数,apply接受的是数组参数。
A.call(this, a,b,c,d)
A.apply(this, [a,b,c,d])
一个传送门:http://www.jianshu.com/p/a7b1...
这篇关于javascript - 关于apply()与call()的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文