小问题,但想知道是否有人可以使用splat建议更好的语法扩展现有对象,但不使用花括号?我的主要目的是在将扩展对象传递给函数时保持缩进样式。这有正确的行为:
base-obj =
old-prop: \value
do-something {
...base-obj
extended-prop: \value
}
但是花括号可以以某种方式消除吗? '做'不起作用:
old-obj =
old-prop: \value
do-something do
...old-obj
new-prop: \value
# do-something will only see new-prop
答案 0 :(得分:2)
也许你想要的是with
:
do-something base-obj with do
extended-prop: \value
来自LiveScript 1.3.1 operators' docs:
带有(也就是克隆端口)的中缀组合了克隆和属性复制操作符,以便于创建对象。它相当于^^ obj<<< obj2的。请记住,clone运算符创建了一个原型克隆,并且原型未在JSON中序列化。
答案 1 :(得分:0)
我发现<<<这将完成工作,但有点迂回:
do-something {} <<< base-obj <<<
extended-prop1: \value1
extended-prop2: \value2
更新:已修改,以防止基于@ homam的建议对base-obj进行副作用更改。
答案 2 :(得分:0)
另一种方法,使用do
:
# new object can overwrite old-obj
do-something do
old-obj <<<
new-prop: \value
another: \content
# old-obj can overwrite new object
do-something do
do
new-prop: \value
another: \content
<<< old-obj