javascript - 关于apply()与call()的问题

查看:103
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆