JS apply和call
前言
很基础,放在这里是为了整理前端js的思维导图。
正文
方法定义
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
例子
<script>
function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a,b);
}
add.call(sub,4,5);
</script>
这段代码大多数网站都见过吧,对于新手来说可能会引起误导,这到底证明了啥子东西呢?什么也没有证明啊,既然有关this,那我就这样改一下。
function add(a,b)
{
//输入this
console.log(this);
alert(a+b);
}
打印this
ƒ sub(a,b)
{
alert(a,b);
}
好的,那么后面那个就相当于替换了arguments。这样整个函数的历程我可以这么理解,这个孩子脱离了他的父母(this)的约束,以及丢弃了给他的东西(arguments ),得到了独立然后被社会(新的this)约束了再社会上得到了新的收获(新的arguments )。