我想在我的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 .
如何克服这个?是否有类似的清洁解决方案来使用常量?
答案 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,
]));
...但是也添加了一些样板:(