var原型具有默认值

时间:2011-06-20 20:48:38

标签: javascript prototype-programming

我在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".

3 个答案:

答案 0 :(得分:3)

这可能是一个坏主意,我不知道其他浏览器将如何处理这个问题,但这适用于Chrome ...

http://jsfiddle.net/yvgj8/

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或其他一些。