1

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()将 item 插入 Content 的操作。

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

4

1 回答 1

1

如果正如您的代码所建议的那样,您希望您的实例继承外部对象,一种方法是分配“类”的原型(请注意 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)来完成,以表示它们应该被实例化,而不仅仅是调用。

于 2012-06-30T12:54:51.783 回答