2010-05-28 58 views
0

對象見下類:等效採用文字符號

function availItem(xs, s, m, l, xl) { 
      this.xs = xs; 
      this.s = s; 
      this.m = m; 
      this.l = l; 
      this.xl = xl; 
     } 

我怎樣才能申報使用JSON上面的類?我認爲它應該是以下方式,但問題是要通過論證。

var availItem = { 
       xs : xs, 
       s : s, 
       m : m, 
       l : l, 
       xl : xl 


} 

我想無論是在相同的方式使用像

var obj =new availItem(xs,s,b,l,xl); 
+0

你可以在最後添加一個分號,作爲回答發佈並選擇它是正確的,並且在幾分鐘內應該有各種答案提及JSON和對象文字的區別。 – Anurag 2010-05-28 08:56:53

+0

不知道你想要什麼...如果你只是想創建一個JSON對象的函數,那麼你可以將JSON對象插入函數,然後返回它。 – Calvin 2010-05-28 08:57:25

+1

嗯,是的,JSON是一個靜態的對象描述符,而不是一個函數,所以它不能帶參數。你能更詳細地描述用例嗎? – deceze 2010-05-28 08:58:10

回答

1

這2段代碼是不一樣的。

第一個是創建對象的構造函數。你可以使用它,如:

var obj = new availItem(xs, s, m, l, xl);

此時obj是一個JSON對象。

第二個是一個JSON對象(你會從調用前一個構造函數得到什麼),這僅僅是數據(它沒有提供比一些數據參考其他任何特定功能)。

您沒有指定您需要將參數傳遞給availItem對象的原因。參數可以是您分配給對象屬性的值:

var availItem = { 
       xs : param1, 
       s : param2, 
       m : param3, 
       l : param4, 
       xl : param5 
} 
+3

「此時'obj'是一個JSON對象」 - 你的意思是「是一個JavaScript對象」嗎? – 2010-05-28 09:03:24

+0

是啊無論...'JSON對象'似乎更多的是一個髖關節術語使用。 – 2010-05-28 09:04:11

+4

也許是臀部術語。一個不正確的名詞,當然。 – 2010-05-28 09:05:39

1

嘗試在引號設置屬性。例如:

{ 
    "xs" : xs, 
    "s" : s, 
    "m" : m, 
    "l" : l, 
    "xl" : xl 
} 
+0

如何定義xs,s,m ...作爲參數? – Brij 2010-05-28 09:07:40

1

不幸的是,您不能。這不是一個真正的類(JavaScript中沒有這樣的東西),它是一個函數,JSON(它只是一種數據格式)不能表示函數或函數調用。

您可以得到的最接近的是softcr suggests - 具有正確屬性的對象字面值。引號也很重要 - 如果屬性名稱未被引用,則某些JSON解析器將拒絕JSON。

4

JavaScript中沒有類,只有對象。創建對象的第一種方法通常稱爲實例化或構造的對象。以這種方式定義

function availItem(xs, s, m, l, xl) { 
    this.xs = xs; 
    this.s = s; 
    this.m = m; 
    this.l = l; 
    this.xl = xl; 
} 

對象可以與操作者new

var item = new availItem(...); 

第二種方法創建使用對象的文字符號,其幾乎是一個對象被實例化,但並不完全JSON。最值得注意的是,由於new沒有構造函數(函數),因此它不適用於對象文字。

如果你想使用對象的文字符號,我建議你遵循module patterncriticism保持平衡)

var availItem = availItem(xs, s, m, l, xl) { 
    var my = { 
     xs: xs, 
     s: s, 
     m: m, 
     l: l, 
     xl: xl 
    }; 

    // Add any methods that may be necessary 
    my.method1 = function() { ... }; 

    // etc 

    return my; 
}; 

... 

var item = availItem(...); 

目前還不清楚爲什麼要使用這兩種方法同樣的事情。