用于强制执行 JSON 结构的 Javascript 类

Javascript class for enforcing JSON structure

本文关键字:Javascript 结构 强制执行 JSON 用于      更新时间:2023-09-26

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 插入内容。

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

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