繁体   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