JavaScript--call()函数 & apply()函数 & bind()函数

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript--call()函数 & apply()函数 & bind()函数相关的知识,希望对你有一定的参考价值。

1. call()函数 & apply()函数 & bind()函数

call()、apply()、bind() 都是用来重定义 this 这个对象的

1.1 不传参数

首先定义这样一段函数

    function logEgg() {
        alert("egg is : " + this.egg);
    }

    let hen = {
        egg: "鸡蛋"
    }

call()

    logEgg.call(hen);// egg is : 鸡蛋

apply()

    logEgg.apply(hen);// egg is : 鸡蛋

bind()

    logEgg.bind(hen)();// egg is : 鸡蛋

以上出了 bind 方法后面多了个 () 外 ,结果返回都一致!
由此得出结论,bind 返回的是一个新的函数,你必须调用它才会被执行。


1.2 传参数

首先定义这样一段函数

    function logInfo(name, weather) {
        alert(`name: ${name} , homeTown is: ` + this.homeTown + " and weather is: " + weather);
    }

    let chongQing = {
        homeTown: "重庆",
    }

call()

    logInfo.call(chongQing, '花花', '晴天');//name: 花花 , homeTown is: 重庆 and weather is: 晴天

apply()

    logInfo.apply(chongQing, ['草草', '雨天']);// name: 草草 , homeTown is: 重庆 and weather is: 雨天

bind()

    logInfo.bind(chongQing, '叶叶', '阴天')();// name: 叶叶 , homeTown is: 重庆 and weather is: 阴天

从上面四个结果不难看出:

  • call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
  • call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔
  • bind 除了返回是函数以外,它 的参数和 call 一样。
  • apply 的所有参数都必须放在一个数组里面传进去。

1.3 方法源码

call()
在这里插入图片描述

在这里插入图片描述

apply()

在这里插入图片描述
在这里插入图片描述

bind()

在这里插入图片描述

bind<A0, A1, A2, A extends any[], R>(this: new (arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1, arg2: A2): new (...args: A) => R;


以上是关于JavaScript--call()函数 & apply()函数 & bind()函数的主要内容,如果未能解决你的问题,请参考以下文章

手撕JavaScript call apply bind 函数

JavaScript——call与apply

前端面试题 ---- 手撕JavaScript call apply bind 函数(超详细)

JavaScript call,apply,bind用法

JavaScript call/apply/bind

JavaScript call/apply/bind