2017-07-17 86 views
1

我想在JS中定义一个空的数据类,然后用JSON填充它。 在C#中我会做这样的事情:没有实例化的JavaScript类定义

class Person { 
    string name; 
    int age; 
    Person[] children; 
    var whatever; 
} 

这不起作用,IDE不喜欢它:“意外的令牌一个构造函数,方法,访问,或财产预期”。

我已经试过

class Person { 
    var name; 
    var age; 
    var children; 
    var whatever; 
} 

,但我有JS没有经验,到处我看到声明的变量就定义。

我不明白错误,因为我相信这些属性,我不知道JSON解串器关于对象数组的行为,知道所述对象可能缺少JSON中的属性,但我仍然希望它们在从字符串创建的JS对象中声明(但未设置)。

我该如何让事情奏效?

+0

虽然JavaScript是面向对象的,它并没有真正的类。它具有原型继承。在[MDN](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects)上阅读JavaScript中的OOP。 – PeterMader

+0

您使用的是哪个版本的JavaScript? – Thatkookooguy

回答

3

您需要将其设置为object而不是类,然后在收到JSON时填写属性。

你应该使用类似:

var Person = { 
    name: '', 
    age: '', 
    children: '', 
    whatever: '' 
} 

然后,您可以用Person.name等访问Person对象的属性

反序列化将是这么简单

Person = FunctionThatGivesYouAPersonObjectInJSON(); 
+0

感谢您的快速回答:) – Saryk

+0

没问题,当我从C#移到C#时,我遭受了同样的命运:) –

+0

如何告诉反序列化器“children”属性是“Person”对象的数组?相反,我怎么知道它会使用Person对象来填充数据? - Saryk 8分钟前 – Saryk

0

JSON是用于Java Script对象的符号,因此您不需要将这些变量存储在类中。只需将其存储在普通对象中即可。例如,如果您从ajax请求中接收JSON对象,则可以将其作为普通变量存储。

所以只需使用该对象。

+1

[有没有这样的事情作为“JSON对象](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/) – Andreas

0

您定义了一种这种方式。

class Person{ 
constructor(name, age, children, whatever) { 
    this._name = name; 
    this._age = age; 
    this._children = children; 
    this._whatever = whatever; 
    } 
} 

要实例化,请执行此操作。

var chris = new Person('Chris', 25, 2, 1) 
+0

准确地说,我的观点:我不'我不想知道JSON反序列化器的行为,因为我不认为它会调用类构造函数。 – Saryk

+1

OP正在寻找创建一个对象*,而不需要实例化它。 –

+0

使用@ JayGould的答案 – VIX

0

在ECMAScript6您可以用JavaScript实现类:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes

所以,你将不得不更改您的代码:

class Person{ 
    constructor(age, name) { 
    this.age = age; 
    this.name = name; 
    } 
} 

而且,问题可能出在你的IDE设置。通常在IDE中,您可以选择要使用的语言版本。对于WebStorm例如,你可以在设置中选择:

enter image description here