对象的语法?

时间:2013-12-16 15:29:24

标签: coffeescript

我试图让一个对象跨越多行,就像在JavaScript中一样,但Coffeescript拒绝它。

c_mat = new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd,
    specular: 0x009900, shininess: 300, shading: THREE.SmoothShading } ) 

我被迫在行尾添加\

c_mat = new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd, \
    specular: 0x009900, shininess: 300, shading: THREE.SmoothShading } ) 

我还可以将所有名字放在不同的行上,但在某些情况下,我更喜欢将它们打包在一起。

\行延续和多行是否是我在CoffeeScript中的唯一选择?

3 个答案:

答案 0 :(得分:3)

如果您使用CoffeeScript,请不要只编写JavaScript。

c_mat = new THREE.MeshPhongMaterial
    ambient: 0x030303
    color: 0xdddddd
    specular: 0x009900
    shininess: 300
    shading: THREE.SmoothShading

CoffeeScript documentation on object literals


编辑以使其更清晰:

这确实构建了一个作为参数传递的对象。现在让我们假设您有“位置参数和对象”,您可以编写

c_mat = new THREE.MeshPhongMaterial(
    x
    y
    color: 0xdddddd
    specular: 0x009900
    shininess: 300
    shading: THREE.SmoothShading
)

相当于

c_mat = new THREE.MeshPhongMaterial(x, y, {
  color: 0xdddddd,
  specular: 0x009900,
  shininess: 300,
  shading: THREE.SmoothShading
});

答案 1 :(得分:2)

Javascript忽略换行符,完全取决于{}[](),之类的字符来标记对象,块和数组。 Coffeescript允许那些(在大多数情况下)但也注意换行和缩进。有时,这些方法的组合会混淆编译器。如果我不确定它将如何编译,我会比较一些简单的情况。

在Try Coffeescrpt标签的coffeescript.org上,尝试以下这些行:

obj = 
  1:1
  2:2

obj = {
  1:1
  2:2
}

obj = { 1:1, 2:2}

obj = { 1:1,\
  2:2}

obj = { 1:1,
  2:2
}

所有这些工作,产生相同的Javascript,除了最后一个。最后一个给出了“遗漏}”错误。

\视为转义换行符可能会有所帮助。所以第二个到最后一个变得与它上面的oneliner相同。

2个对象参数的一些工作示例:

foo
  1:1
  2:2
,
  3:3
  4:4

foo({1:1, 2:2}
  {3:3, 4:4}
)

foo({1:1, \
  2:2}
  {
    3:3
    4:4}
)

foo x,
  1:1, 2:2
, 
  3:3
  4:4

答案 2 :(得分:1)

你应该使用Coffeescript的原生语法:

c_mat = new THREE.MeshPhongMaterial
  ambient: 0x030303
  color: 0xdddddd,
  specular: 0x009900
  shininess: 300
  shading: THREE.SmoothShading