2013-12-16 39 views
0

我試圖讓一個對象跨越多行,就像在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中唯一的選擇?

+1

請閱讀[文檔](http://coffeescript.org/#objects_and_arrays)。 –

+2

@MattBall,文檔說我可以使用支撐語法並且沒有提及多行。 –

回答

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 
}); 
+0

這有效,但感覺很奇怪。它看起來並不像我傳遞一個參數,而是看起來像傳遞了幾個參數。當我有位置參數和對象時會發生什麼? –

+0

這確實構建了一個作爲唯一參數傳遞的對象。請參閱編輯 –

+0

如何傳遞兩個連續位置參數的對象,而且這兩個對象都不在一行中? –

1

相當於你應該使用CoffeeScript中的原生語法如下:

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

JavaScript忽略換行符,完全取決於像{}[](),這樣的字符來標記對象,塊和數組。 Coffeescript允許這些(大多數情況下),但也注意換行符和縮進。有時這些方法的組合混淆了編譯器。如果我不確定如何編譯某些東西,我會比較一些簡單的情況。

同時在嘗試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,除了最後一個。最後一個給出'missing}'錯誤。

這可能有助於將\視爲脫離換行符。所以第二個到最後一個和上面的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