簡體   English   中英

使用文字符號等效的對象

[英]Equivalent of object using literal notation

請參閱以下課程:

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);

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,但不是JSON。 最值得注意的是, new運算符不使用對象文字,因為它們沒有構造函數(函數)。

如果要使用對象文字表示法,建議您遵循模塊模式平衡的批評

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(...);

目前尚不清楚為什么要在同一件事上同時使用這兩種方法。

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

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

那兩個代碼不一樣。

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

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
}

不幸的是,你不能。 那實際上不是一個類(Javascript中沒有這樣的東西),它是一個函數,而JSON(只是一種數據格式)不能表示函數或函數調用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM