【发布时间】:2015-09-01 00:00:47
【问题描述】:
我确信这相对简单,而且我缺少一些明显的东西。我正在阅读 ES6 上的 Mozilla's tutorials,他们的 chapter on destructuring 包含以下模式:
功能参数定义
作为开发人员,我们通常可以通过接受 具有多个属性的单个对象作为参数而不是 迫使我们的 API 消费者记住许多个人的顺序 参数。我们可以使用解构来避免重复这个单一的 每当我们想要引用其属性之一时,参数对象:
function removeBreakpoint({ url, line, column }) { // ... }这是来自 Firefox DevTools 的真实世界代码的简化 sn-p JavaScript 调试器(也在 JavaScript 中实现——yo dawg)。 我们发现这种模式特别令人愉悦。
我不明白这与解构有何关系。您是否允许将对象传递给此函数,只要它包含所有项目,即{ line: 10, column: 20, url: 'localhost' },它就可以按任意顺序传递?
如果是这样,与类似的东西相比有什么好处
function removeBreakpoint(params) {
// ...
}
其中 params 是具有 url、line 和 column 的对象?这个想法是否只是通过显式定义它们来强制 Javascript 在解构上下文中使用时验证函数的参数?
【问题讨论】:
-
"一个对象……只要它包含所有项目,就可以按任意顺序排列" 对象没有顺序,您不必拥有所有项目。不进行验证或处理。好处是可以直接引用
url、line和column,而不是函数体引用params.url、params.line、params.column。 -
@Barney:ES5 中的对象属性没有顺序。 They do in ES6.
-
@T.J.Crowder 这在所有迭代方法中都实现了吗?
-
@Barney:如果不是这样,那就太疯狂了。 :-) 我认为枚举对象属性的所有内容最终都会调用
[[OwnPropertyKeys]]或[[Enumerate]]。前者是明确的顺序,后者是根据前者定义的。当然,获取键数组的各种方法for-in和for-of都使用它们。 -
@Barney:对不起,我应该说以上适用于不覆盖其迭代器的对象(相对于
for-of)。例如,数组确实定义条目将按其索引的数字顺序访问,并且跳过非条目属性。
标签: javascript ecmascript-6 ecmascript-harmony