【发布时间】:2025-12-14 13:30:01
【问题描述】:
我想在我的 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.
但是当我想在构建时使用 const (实际上这就是重点),那么它就不起作用了:
var objectThatWorks = new EPPZObject(
{
'width' : '9',
'height' : '9',
});
var objectThatNotWorks = new EPPZObject(
{
EPPZ.width : '9',
EPPZ.height : '9',
});
上面写着:
Uncaught SyntaxError: Unexpected token .
如何克服这个问题?有没有类似干净的解决方案来使用常量?
【问题讨论】:
-
也许问题是
How to use expressions as associative array keys at declaration time? -
您不能在对象文字中使用变量。也许您应该寻找一些 makro 预处理器,而不是将名称定义为 js 变量。这些常量永远不会改变,为什么要让它们动态呢?
-
我只想让我的 IDE (PHPStorm) 在键入构造函数时自动更正/自动建议。我想要索引所有参数键。我敢打赌“外国”预处理器不会为我这样做。
-
JavaScript 中没有 Class 之类的东西
-
@Alex: function Class(){}Class.prototype.construct=function(){};Class.extend=function(e){var t=function(){if(arguments[0 ]!==Class){this.construct.apply(this,arguments)}};var n=new this(Class);var r=this.prototype;for(var i in e){var s=e[i ];if(s instanceof Function)s.$=r;n[i]=s}t.prototype=n;t.extend=this.extend;return t}
标签: javascript namespaces constants public