2011-06-20 10 views
2

Javascriptで定義された列挙型のStijn de Wittのソリューションを見ました。デフォルトの値を持つvarプロトタイプ

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 + " " + RRR.date);  //to display the text "RRRaney 2007". 

alert(RRR.name + " " + RRR.date); //to display the text "RRRaney 2007". 

私は ので、私のようなものを書くことができ、デフォルトとして.nameのを定義するために試してみたいですまたは単に

alert(RRR);      // to display the text "RRRaney". 

答えて

1

私は考えることができる唯一の方法はハックと望ましくないであろうが、ここではそれが行く:

var RRR = new String("RRRaney:"); 
RRR.date = "2007"; 

alert(RRR + RRR.date); 

の代わりにあなたのnameのための文字列リテラルを使用して、この値を使用して、オブジェクトをするString型のラッパーオブジェクトを借りていますそのラッパーオブジェクトにdateプロパティを追加することにより、

あなたが望む結果が得られますが、真剣にそれをしないでください。典型的なオブジェクトリテラルを守ってください。


あなたはあなたの質問のタイトルにprototypeを述べました。

あなたはそれが作成するオブジェクトのデフォルトnameを与えるコンストラクタ関数のことを考えた場合、それは別の話だ:

var MyConstructor = function(date) { 
    this.date = date; 
}; 

MyConstructor.prototype.name = "RRRaney:"; 

var inst = new MyConstructor("2007"); 

しかし、それはあなたが望む方法でRRRを表すものではありません。

+0

dw - これは私のハックな試みにもなるだろうが、私は応答を書いてもいない。これは行わないでください。 ;) –

+0

@ g.d.d.c:そうですね、今は汚いです。ああとても汚い。 – user113716

3

まあ、これは悪い考えであるかもしれないと私は他のブラウザがこれをどのように処理するかわかりませんが、これはクロームで動作します...

http://jsfiddle.net/yvgj8/

var RRR = { 
      name: "RRRaney", 
      number: 2, date: 2007, 
      toString: function(){ 
       return this.name; 
      } 
      }; 

alert(RRR + " " + RRR.date); 

が、これは実際とは思いませんでした他のブラウザでは動作しない可能性があります。

+0

+1私はそれが好きです。私はブラウザのサポートについても興味があるだろう。 – user113716

+0

IE6とIE8でチェックされ、非常に興味深いです。 Javaの一般的なプラクティスですが、実際にはjsで動作するとは思っていませんでした。実際にはかなり便利です。 –

+0

+1 ... FF&IE8で動作...これは本当に滑らかです – Gerrat

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またはそのような名前に変更する必要があります。