使用命名空间常量作为对象键?

时间:2014-01-02 23:50:50

标签: javascript namespaces constants public

我想在我的Javascript对象中使用字符串常量而不是直接字符串(在定义参数键时等)。目的是让我的代码由IDE索引,有建议,自动更正/完整,所有防错的好东西。

我想为这个类EPPZObject的构造函数定义显式键,所以我做了:

var EPPZ =
{
    width: 'width',
    height: 'height'
}

var EPPZObject = Class.extend
({

    construct: function(parameters)
    {
        // Constant usage works fine here.
        log(parameters[EPPZ.width]);
        log(parameters[EPPZ.height]);
    }

});

在客户端代码中,我也可以使用常量:

log(EPPZ.width); // Logs 'width' just fine.
log(EPPZ.height); // Logs 'height' just fine.

但是当我想在构造时使用constats时(实际上这将是整点),那么它就不起作用了:

var objectThatWorks = new EPPZObject(
        {
            'width' : '9',
            'height' : '9',
        });

var objectThatNotWorks = new EPPZObject(
        {
            EPPZ.width : '9',
            EPPZ.height : '9',
        });

它说:

Uncaught SyntaxError: Unexpected token . 

如何克服这个?是否有类似的清洁解决方案来使用常量?

2 个答案:

答案 0 :(得分:0)

你不能像这样做一个单身人士吗?:

var EPPZ = {
        width : '9',
        height : '9'
};

然后可能

var objectThatWorks = new Object();
objectThatWorks.width = EPPZ.width;
objectThatWorks.height = EPPZ.height;

修改

您是否尝试过原型设计?

EPPZObject.prototype.width = EPPZ.width;

答案 1 :(得分:0)

可以用非常奇怪的方式解决。不确定我是否会在生产中使用它。

使用将参数“转换”为对象的辅助对象:

var Parameters = Class.extend
({
    construct: function(parameters)
    {
        for (var index = 0; index < parameters.length; index += 2)
        { this[parameters[index]] = parameters[index+1]; }
    }
});

现在我几乎可以按照我想要的方式构建对象......

var object = new EPPZObject(new Parameters(
[
    EPPZ.width, 8,
    EPPZ.height, 9,
]));

...但是也添加了一些样板:(