2012-10-04 65 views
0

下面的代碼文本是非常有效的在JavaScript: -未命名的對象在JavaScript

({ a:10 , b:20 , c:30 });

但是做的時候,我們需要這樣的,我們不能在我們的代碼中引用的對象?

+1

我們沒有。但是,「沒有指向這個字符串」;'也是有效的JS ... – nnnnnn

+1

你認爲我們做了什麼? – Quentin

回答

2

您經常使用未命名的文字作爲函數調用的參數。一個流行的實施例在呼叫上的元素jQuery插件的方法,例如:

$("div").someMethod({prop:'value',otherProp:'value2'}); 

還可以(並且通常是有益的),以在預先然後分配這樣的對象變量傳遞給它,像這樣:

var options = {prop:'value',otherProp:'value2'}; 
$("div").someMethod(options); 

但有時它的第一種方式更簡單,更清潔。

+0

你所說的是真實的,但它並沒有真正解決這個問題,它談論的是一個線上的對象文字本身,不能從其他任何地方引用。 – nnnnnn

+0

謝謝Andy.Then實際函數(someMethod())如何處理我們已經通過的這個對象字面值? –

+1

@nnnnnn我明白,但我想他可能是在問什麼時候會使用未命名的文字。 @RohitP,'someMethod'看起來像這樣: someMethod = function(myObject){//然後使用屬性 console.log(myObject.prop,myObject。otherProp); } – AndyPerlitch

1

這段代碼有點「無意義」,因爲你不能引用它(正如你所說的)。

您可以使用許多語言構建無效的代碼。

例如,

function foo() { 
    var bar = 42; 
} 

此外,上述功能是完全有效的,但並沒有做太多。

1

({ a:10 , b:20 , c:30 });沒有用處,因爲您沒有該對象的參考。但是我們可以用相同的方式定義匿名函數(function(){ })();這非常有用。

+0

匿名函數僅在可能被調用時纔有用。未調用的匿名函數與未調用的聲明函數一樣有用(即不是)。 – RobG

+0

@RobG - 是的,但Shusl的例子是一個立即被調用的匿名函數,所以(假設它有實際的內容)是有用的。 – nnnnnn

1

其實這可以非常方便。例如。您可以無縫地使用這種方法處理國際化:

({de: {title: 'foo'}, en: {title: 'bar'}})[navigator.language.slice(0,2)] 

所以你可以像這樣的水木清華結束了:

var lang = navigator.language.slice(0,2) 
var dict = ({de: {title: 'foo'}, en: {title: 'bar'}})[lang] 
console.log(dict.title) 
+0

ahh..I see..That sound cool ... –

0

()是集團化經營。 [reference]

該表達式返回評估結果。 這可能是類型參考。

{a:10, b:20, c:30}['a']; // invalid 
({a:10, b:20, c:30})['a']; // valid. 
Because the object `{a:10, b:20, c:30}` is after being evaluated. 
+1

需要括號來強制對象被解釋爲一個表達式,即使它自己出現在一行上,因爲否則大括號「{}」被解釋作爲一個塊。如果對象出現在需要表達式的地方,例如'alert({a:10,b:20,c:30} ['a']);''可以正常工作, a:10,b:20,c:30} ['a'];'。 – nnnnnn

+0

- @ nnnnnn感謝您的示例... –

+0

謝謝。 如果使用函數'alert',因爲'('在'{'之前到達,被識別爲未命名的對象。 – shinya