Эквивалент объекта с использованием буквенной нотации - PullRequest
0 голосов
/ 28 мая 2010

См. Следующий класс:

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

Ответы [ 4 ]

4 голосов
/ 28 мая 2010

В 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 не работает с литералами объекта, поскольку у них нет конструктора (функции).

Если вы хотите использовать буквенное обозначение объекта, я предлагаю вам следовать шаблону модуля ( критика для баланса)

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

Непонятно, почему вы хотите использовать оба метода для одной и той же вещи.

1 голос
/ 28 мая 2010

Эти 2 фрагмента кода не одинаковы.

Первый - это конструктор , который создает объект. Вы можете использовать его как:

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

На данный момент obj является объектом JSON.

Второй объект - это JSON-объект (который вы получили бы при вызове прежнего конструктора), который представляет собой просто data (он не предоставляет какой-либо конкретной функциональности, кроме ссылки на некоторые данные).

Вы не указали причину, по которой вам нужно передавать параметры в объект availItem. Параметры могут быть просто значениями, которые вы назначаете для атрибутов объекта:

var availItem = { 
               xs : param1,
                s : param2,
                m : param3,
                l : param4,
                xl : param5
}
1 голос
/ 28 мая 2010

К сожалению, вы не можете. Это на самом деле не класс (такого нет в Javascript), это функция, и JSON (это просто формат данных) не может представлять функции или вызовы функций.

Самое близкое, что вы можете получить, это то, что softcr предлагает - литерал объекта с правильными свойствами. Кавычки также имеют значение - некоторые парсеры JSON будут отклонять JSON, если имена свойств не заключены в кавычки.

1 голос
/ 28 мая 2010

Попробуйте установить свойства в кавычках. Например:

{
    "xs" : xs,
    "s" : s,
    "m" : m,
    "l" : l,
    "xl" : xl
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...