2010-05-28 57 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(...); 

目前还不清楚为什么要使用这两种方法同样的事情。