定义参数 Json 或对象

Define parameter Json or object

我有在屏幕上绘制一些控件的方法,现在我希望这个方法是一个 API 并使其更具日常性,以便为用户提供决定他想要哪个控件的能力在屏幕上绘制。 我想要求提供一些 json 结构,但不确定它是否比对象更好...,任何建议

例如

withSection1 true
withSection2  false
withSecttion3 false
withSection4 true
.....

但如果用户想要绘制所有而不是提供所有数据(部分),默认情况下会添加一些参数。所以我不确定如何构建它。

更新

假设我使用 json 作为该部分的 如果用户默认绘制所有控件

,我应该如何将默认值放入方法签名中
{
    "withSection1": 'true'
    "withSection2": 'true'
    "withSection3": 'false'
    "withSection4": 'true'

}

因此方法签名将类似于 drawScreen(jsonStr)

对象(如果你想使用简单的对象而不使用原型)和 JSON 之间的主要区别是你将无法使用 JSON 中的函数。

如果您不需要功能(从不),您当然应该选择 JSON,因为它限制更多,而且防止用户做您不希望做的事情几乎总是一件好事.如果您打算这样做,这也可以帮助您将它与另一种语言一起使用。

但是,我创建了一个 javascript/node.js 框架(如果您想查看示例,我的个人资料中有一个 link),我在其中广泛使用 javascript 对象进行配置,因为它确实更加模块化(您可以将一些代码分解为变量,将一些文件合并在一起而无需做很多工作,您可以在解释方面获得一点性能,......)!哦,我忘记了重要的事情!您不能在 JSON.

中使用评论

这里有一些简单的例子(不要那样写代码:):

对象

// foo.js
var foo = {
    foo: 1
};

// bar.js
var bar = {
    bar: function() { return 2; }
};

// merge.js
var obj = merge(foo, bar); // Implement merge function once.

JSON

foo.json(无评论)

{
    "foo": 1
}

bar.json(无评论)

{
    "bar": 'no functions'
}

// merge.js
// You have to get the JSON files, then parse them (JSON.parse in javascript), then merge them.

正如我所说,您可以在我的个人资料中的 link 之后看到对象的更多重要用途。

更新

如果您想在 JSON 中设置默认值 and/or 哪个字段和哪种类型的字段,您当然应该有另一个 JSON 或描述您的结构的对象。在框架中,用户的输入是从合约文件处理的,例如:

var jsonConfiguration = '{"withSection1": false}';

var contract = {
    withSection1: {
        type: 'boolean',
        default: true
    },
    withSection2: {
        type: 'boolean',
        default: true
    },
    withSection3: {
        type: 'boolean',
        default: false
    },
    withSection4: {
        type: 'boolean',
        default: true
    }
}

// Check types, add default values if needed, ...
var configuration = processConfiguration(jsonConfiguration, contract);

drawScreen(configuration);

function processConfiguration(jsonConfiguration, contract) {
    var configuration = JSON.parse(jsonConfiguration),
        processedConfiguration = {}
    ;

    for (var key in contract) {
        if (undefined === configuration[key]) {
            processedConfiguration[key] = contract[key].default;
        } else {
            processedConfiguration[key] = configuration[key];
        }
    }

    return processedConfiguration;
}