JavaScript 中的“this”关键字——第 2 部分
“ 这个 ” JavaScript 中的关键字——第 2 部分
显式绑定 (呼叫、申请和绑定)
大号 上周我发表了这篇文章的第 1 部分, JavaScript 中的“this”关键字 我们讨论了 3 条规则来确定 ** 这个** 上下文,在本文中将讨论第四个。
- 显式绑定
constructor function
迎接 函数在具有相同功能的两个构造函数中很常见。
现在,在下面的示例中,“greet”函数是一个独立函数,而不是每个构造函数中的方法。
我们知道,为了说明什么 这个 关键字是引用我们首先要看看函数在哪里被调用。这就提出了一个问题,我们如何调用 迎接 但有它被调用 这个 关键字引用 学生 或者 员工 目的。我们不能只做 std1.greet() 或者 emp1.greet() 就像我们之前做的那样,因为对象没有 迎接 方法。
在 JavaScript 中,每个函数都包含一个方法,允许您完全执行此操作,并且该方法被命名为 称呼 .
考虑到这一点,我们可以调用 迎接 在上下文中 学生 或者 员工 使用以下代码
.call
“ 称呼 ” 是每个函数上的一个方法,它允许您调用函数,指定函数将在什么上下文中被调用。
再次, 称呼 是每个函数的属性,传递给它的第一个参数将是调用函数的上下文(或焦点对象)。换句话说,您传递给 call 的第一个参数将是 这个 该函数内的关键字正在引用。
这是基础 ** 显式绑定** 因为我们明确地(使用.call),指定什么 这个 关键字是引用。
现在让我们稍微修改一下我们的 greet 函数。如果我们也想传递一些参数怎么办?连同他们的名字一起说。像这样的东西
.call
现在将参数传递给正在调用的函数 。称呼 ,在指定第一个参数即上下文( 这个 )。
这有效,它展示了如何将参数传递给正在调用的函数 。称呼 .但是,您可能已经注意到,必须一个一个地传递参数有点烦人。如果我们可以将整个数组作为第二个参数传入并且 JavaScript 会为我们展开这些内容,那就太好了。
对我们来说是个好消息,这正是 。申请 做。 。申请 与 。称呼 ,但是您可以传入一个数组,而不是一个一个地传入参数,它会将数组中的每个元素作为函数的参数展开。
所以现在使用 。申请 ,我们的代码可以变成这个(如下),而其他一切都保持不变。
.apply
到目前为止,在我们的“ 显式绑定 ” 我们已经了解的规则。 称呼 也 。 申请 这两者都允许你调用一个函数,指定什么 这个 关键字将在该函数内部引用。
该规则的最后一部分是 . 绑定 . . 绑定 与 完全相同。 称呼 但它不会立即调用该函数,而是返回一个您可以稍后调用的新函数。因此,如果我们查看之前的代码,使用 . 绑定 ,它看起来像这样
.bind
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明