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 )。

原文地址:https://www.cnblogs.com/aoximin/p/13129969.html