龙空技术网

JavaScript - call(), apply() 还有 bind()

Web技术前沿 81

前言:

现在兄弟们对“bind函数实现 js”都比较注重,兄弟们都想要知道一些“bind函数实现 js”的相关内容。那么小编也在网上搜集了一些有关“bind函数实现 js””的相关内容,希望我们能喜欢,姐妹们一起来学习一下吧!

在面向对象的 JS 中,我们了解到在 JS 中,一切都是对象。 因为一切都是对象,我们开始明白我们可以设置和访问函数的附加属性, 我们了解到 this 关键字。 每个函数都会自动获取此属性。看下面的代码:

那么为什么我需要保存这个引用呢? 因为在 deleteBtn.addEventListener 内部,this 指的是 deleteBtn 对象, 这通常不是你想要的,有更好的解决方案吗?

bind()

官方文档说: bind() 创建一个新函数,在调用该函数时,将其 this 关键字设置为提供的值。这是非常强大的,它让我们在调用函数时显式定义 this 的值。看下面的代码:

让我们分解一下。 当我们使用 bind() 方法时:

JS 引擎正在创建一个新的 pokemonName 实例并将 pokemon 绑定为其 this 变量,并且它复制了 pokemonName 函数。创建 pokemonName 函数的副本后,它可以调用 logPokemon(),尽管它最初不在 pokemon 对象上。 它现在却可以识别其属性(Pika 和 Chu)及其方法。

很酷的是,在我们 bind() 一个值之后,我们可以像使用任何其他普通函数一样使用该函数。

call(), apply()

call() 的官方文档说: call() 方法使用给定的 this 值和单独提供的参数调用函数。

这意味着,我们可以调用任何函数,并明确指定 this 应该在调用函数中引用什么。 真的类似于 bind() 方法! 这绝对可以让我们免于编写 hacky 代码。

bind() 和 call() 的主要区别在于调用方法:

call() 和 apply() 的目的完全相同。 它们工作方式之间的唯一区别是 call() 期望所有参数单独传入,而 apply() 期望所有参数的数组。 看下面的代码,注意两个函数的调用方式:

感谢阅读!

标签: #bind函数实现 js