【问题标题】:Equivalent of object using literal notation使用文字符号的对象等价物
【发布时间】:2010-05-28 08:50:58
【问题描述】:

参见以下课程:

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

【问题讨论】:

  • 您可以在末尾添加一个分号,将其作为答案发布并选择正确,几分钟后应该会有各种答案提到 JSON 和对象文字之间的区别。
  • 不确定你想要什么......如果你只是想让函数创建一个 JSON 对象,那么你可以将 JSON 对象插入到函数中,然后返回它。
  • 嗯,是的,JSON 是一个静态对象描述符,而不是一个函数,所以它不能带参数。你能再描述一下用例吗?
  • 这些都不是 JSON,如果有的话,它的 Object Literal Notation,JSON 格式是其子集。调用任何 JSON 的前提是它包含在 string 中。但是你是怎么想出这样一个想法的呢?

标签: javascript object


【解决方案1】:

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 运算符不适用于对象字面量,因为它们没有构造函数(函数)。

如果你想使用对象文字表示法,我建议你遵循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(...);

不清楚你为什么要对同一件事使用这两种方法。

【讨论】:

    【解决方案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
    }
    

    【讨论】:

    • “此时 obj 是一个 JSON 对象” - 你的意思是“是一个 Javascript 对象”吗?
    • 是的,无论如何...JSON object 似乎更适合使用时髦的术语。
    • 但是“数据传输格式”的 JSON 不能包含函数,Javascript 对象字面量 可以。
    • 卢卡,请参阅我对 OP 的评论。 JSON 不是一个可以应用于任何事物的时髦术语。 JSON 是 JSON,Object Literal Notation 是 Object Literal Notation。正如我所说,调用任何 JSON 的前提是它一个字符串。所以我担心你错了而安迪是对的:)
    • @Luca:我一整天听到的最有趣的事情,但现在只是上午 10:30 :-) 正如 deceze 所说,JSON 是一种“数据传输格式”。你的回答说obj 是使用new 语句从构造函数创建的,是一个JSON 对象。这根本不是真的,它不是 JSON 格式——它是一个 Javascript 对象。第二个也不是 JSON 对象,它只是一个对象文字。我建议您在 json.org 阅读有关 JSON 的更多信息。
    【解决方案3】:

    尝试在引号中设置属性。例如:

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

    【讨论】:

    • 如何定义 xs,s,m... 作为参数?
    【解决方案4】:

    很遗憾,你不能。那不是一个真正的类(Javascript 中没有这样的东西),它是一个函数,而 JSON(它只是一种数据格式)不能表示函数或函数调用。

    你能得到的最接近的是softcr suggests - 一个具有正确属性的对象字面量。引号也很重要——如果属性名没有被引用,一些 JSON 解析器会拒绝 JSON。

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 2011-11-20
      • 2010-12-25
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多