javascript - 绑定(bind)在 Javascript 中意味着什么?

标签 javascript binding

我正在阅读这本名为 Eloquent JavaScript 的好书,但我对 this example: 中使用“绑定(bind)”一词感到困惑。

It is possible to include symbol properties in object expressions and classes by using square brackets around the property name. That causes the property name to be evaluated, much like the square bracket property access notation, which allows us to refer to a binding that holds the symbol.

let stringObject = {
  [toStringSymbol]() { return "a jute rope"; }
};
console.log(stringObject[toStringSymbol]());
// → a jute rope

据我了解(到目前为止,在我的 JS 之旅中),“绑定(bind)”涉及指定函数在哪个 this 或对象上下文中运行。 See here. .绑定(bind)可能与上下文有关。这就是为什么我们有 .bind()

但是在这个例子中我们绑定(bind)了其他东西(一个方法,它的键是一个符号)。 binding 是否仅意味着将属性(基元或方法)附加到对象?

最佳答案

绑定(bind)是否仅意味着将属性(基元或方法)附加到对象?

没有

您的上一段提供了更好的解释:

“绑定(bind)”涉及指定哪个 this 或对象上下文

有点

JavaScript 跟踪的所有内容都是绑定(bind)的。事实上,undefined 的定义意味着 JavaScript 无法找到绑定(bind)的标识符。

回答

在 JavaScript 中绑定(bind)某些东西意味着在特定的 Environment Record 中记录该标识符。每个 Environment Record 都与特定的 Execution Context 相关 - 并将标识符(变量或函数名称)绑定(bind)到该执行的 this 关键字上下文。

引用

https://www.ecma-international.org/ecma-262/5.1/#sec-10.5

不太正式

将环境记录想象成一桶桶的东西。这些不是对象或函数或变量或我们用 JavaScript 编码的任何东西,这些桶包含所有这些东西。 JavaScript 应用程序中有很多桶。每个桶独立于其他桶运行。这种独立性在 JavaScript 中表示为上下文(或执行上下文)。但有时我们想在另一个桶中使用一个桶中的东西。这就是绑定(bind)的用武之地。我们可以将一个桶中的内容绑定(bind)到另一个桶的上下文中以在那里执行。 (做这一切的副作用是 this 关键字反射(reflect)了桶借用了东西)。

关于javascript - 绑定(bind)在 Javascript 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49662203/

相关文章:

javascript - Durandal,可观察的非单例模块,无需显式使其成为可观察的

javascript - 线性模式在具有单独组件的 mat-h​​orizo​​ntal-stepper 中不起作用

javascript - 错误 : Digest already in Progress

wpf - 如何将 "IsDirty"属性添加到 LINQ to SQL 实体?

javascript - 替换 Windows '\\' 路径中的文件名

javascript - 以编程方式生成纸影

Java的final方法使用静态绑定(bind),但JVM在编译时使用 "invokevirtual"指令

java - 绑定(bind)生成器有什么用?

css - 如何对 backgroundImage URL 进行 knockout 绑定(bind)?

c# - 我可以将剪贴板作为命令参数发送吗?