我在Stijn de Witt看到了Javascript中的definine枚举的解决方案。
var SIZE = {
SMALL : {value: 0, name: "Small", code: "S"},
MEDIUM: {value: 1, name: "Medium", code: "M"},
LARGE : {value: 2, name: "Large", code: "L"}
};
用法:
alert(SIZE.SMALL.value);
...
我一直在尝试对此进行调整以允许我定义用户。
var RRR : {name: "RRRaney:, number: 2, date: 2007};
这正如我所料:
alert(RRR.name + " " + RRR.date); //to display the text "RRRaney 2007".
我想尝试将.name定义为默认值, 所以我可以这样写:
alert(RRR + " " + RRR.date); //to display the text "RRRaney 2007".
或只是
alert(RRR); // to display the text "RRRaney".
答案 0 :(得分:3)
这可能是一个坏主意,我不知道其他浏览器将如何处理这个问题,但这适用于Chrome ...
var RRR = {
name: "RRRaney",
number: 2, date: 2007,
toString: function(){
return this.name;
}
};
alert(RRR + " " + RRR.date);
没想到这会有效,所以很有可能在其他浏览器中没有。
答案 1 :(得分:1)
我能想到的唯一方法就是hackish和不受欢迎,但在这里:
var RRR = new String("RRRaney:");
RRR.date = "2007";
alert( RRR + RRR.date );
不是使用name
的字符串文字,而是借用String包装器对象作为您的对象,其值为"RRRaney:"
,并向该包装器添加date
属性对象
它给出了你想要的结果,但是说真的,不要这样做。只需坚持使用典型的对象文字即可。
您在问题标题中提到了prototype
。
如果您正在考虑为其创建的对象提供默认name
的构造函数,那就是另一个故事:
var MyConstructor = function( date ) {
this.date = date;
};
MyConstructor.prototype.name = "RRRaney:";
var inst = new MyConstructor( "2007" );
但它并不以您想要的方式代表RRR
。
答案 2 :(得分:0)
我不确定我是否应该写这个,因为它与Kingjiv的回答是一致的。但它略有不同,所以无论如何我决定把它放在这里。
function enum(name, value, date) {
this.name = name;
this.value = value;
this.date = date;
}
enum.prototype.toString = function() {
return this.name;
}
用法是:
RRR = new enum("RRRaney", 2, 2007);
alert(RRR + " " + RRR.date);
编辑:对象名称的不幸选择。显然enum
是javascript 1.3+中的保留关键字,因此代码在Internet Explorer中失败。如果你想使用它,你需要将它重命名为Enum
或其他一些。