用于实施JSON结构的Javascript类

时间:2012-06-30 12:09:47

标签: javascript

相对较新的JavaScript,因此想知道实现以下要求的最佳方法是什么。 我想创建JSON对象(RPC请求对象),并需要强制执行某些结构。据我所知,JS是动态语言,因此我可以随时向对象添加任何类型。但是,我喜欢定义一个类,我可以填充它来构造JSON请求。

var RecReq = {
            ID:{},
            HeaderLevel:{},
            Content:{} //Content object goes here
        },
        HeaderLevel = {
            HeaderID:{},
            Note:{}
        },
        Content = {
            Item: [] //Array of Item goes here
        },
        Item = {
            IDs:[]
        };

    function ReceiveObj() {
        this.RecReq = RecReq,
            this.HeaderLevel = HeaderLevel,
            this.Content = Content,
            this.Item = Item
    };
    return new ReceiveObj();

我确信上面的代码有很多问题。我不认为该对象是在初始化数组的情况下创建的。  在返回的对象上,我无法执行push()操作以将iten插入到Content。

你会如何处理这个问题。您是在动态创建对象,还是更好地定义强制某种结构的对象。

1 个答案:

答案 0 :(得分:1)

如果你的代码建议,你希望你的实例继承外部对象,一种方法就是分配'class'的原型(小心在JS中用类的术语思考 - 它不是一个类中的Java等感觉到对象。

var obj = { 
    prop_1: 'foo',
    prop_1: 'bar'
}
function Something() {
    alert(this.prop_1); //alerts "foo"
}
Something.prototype = obj;
var something = new Something();

这只是一种方式。有很多模式可以控制继承(以及其他可以实现你想要的模式,甚至不用接近继承的概念)。

至于push()无效,在您的代码中,Content是一个对象,而push()Array原型的一种方法。换句话说,您只能push()进入数组。也许你的意思是Content.Item,这是一个数组。

最后,我会避免大写名字。在JavaScript中,这往往只使用类模拟中使用的函数(如ReceiveObj)来表示它们应该被实例化,而不仅仅是被调用。