call、apply、bind 的基本概念
前言
科学的尽头是神学,this 关键字是 JS 中最复杂的机制之一。在 React 中,bind 常用于绑定组件的实例方法,特别是使用类组件时。如果不使用 bind,this 会在事件调用时丢失,导致报错。到底三剑客有啥威力?今天,就让我们来揭开它那神秘的面纱。🧐
call 的概念
定义
Function
实例的 call()
方法会以给定的 this
值和逐个提供的参数调用该函数。
语法
call(thisArg)
call(thisArg, arg1)
call(thisArg, arg1, arg2)
call(thisArg, arg1, arg2, /* …, */ argN)
参数
返回值
使用指定的 this
值和参数调用函数后的结果。
描述
备注: 这个函数几乎与 apply()
相同,只是函数的参数以列表的形式逐个传递给 call()
,而在 apply()
中它们被组合在一个对象中,通常是一个数组——例如,func.call(this, "eat", "bananas")
与 func.apply(this, ["eat", "bananas"])
。
通常,在调用函数时,函数内部的 this
值是访问该函数的对象。使用 call()
,你可以在调用现有函数时将任意值分配给 this
,而无需首先将函数附加到对象上作为属性。这样可以将一个对象的方法用作通用的实用函数。
警告: 不要使用 call()
来链式调用构造函数(例如,实现继承)。这会将构造函数作为普通函数调用,这意味着 new.target
的值为 undefined
,而类会抛出错误,因为它们不能在没有 new
的情况下被调用。请改用 Reflect.construct()
或 extends
。