0

名前付き定数を作成する必要があります。

例えば:

NAME_FIELD: {
            CAR : "car", 
            COLOR: "color"}

使用:

var temp = NAME_FIELD.CAR // valid
var temp2 = NAME_FIELD.CAR2 // throw exception

キーが有効でない場合、何よりもこの列挙型がエラーを引き起こすようにする必要があります

4

2 に答える 2

1

何よりも、キーが有効でない場合、この列挙型がエラーを引き起こすようにする必要があります

残念ながら、できません。疑似列挙を行う方法は、オブジェクトにプロパティを作成する通常の方法ですが、そうでないオブジェクトからプロパティを取得しようとすると、JavaScript エンジンにエラーをスローさせることはできません。存在。代わりに、エンジンは を返しundefinedます。

明らかにユーティリティの問題がある関数を使用してこれを行うことができます。

別の方法として (そして、私はこのアイデアが本当に好きではありません)、次のようにすることもできます。

var NAME_FIELD$CAR = "car";
var NAME_FIELD$COLOR = "color";

それらに無料の識別子としてアクセスするため、存在しない値を読み取ろうとします。

var temp2 = NAME_FIELD$CAR2;

... で失敗しますReferenceError。(これは非厳密モードのコードにも当てはまります。暗黙的グローバルの恐怖は、フリー識別子への書き込みにのみ適用され、フリー識別子からの読み取りには適用されません。)

于 2013-02-19T10:41:59.450 に答える
0

setプレーンな JavaScript オブジェクトのカスタム セッターとゲッターが非推奨になったため、オブジェクトと関数のクラスを定義することで解決できます。

NAME_FIELD= {
     CAR : "CAR", 
     COLOR: "COLOR"
};

function MyClass(){
}
MyClass.prototype.setProp = function (val) {
  if (!(val in NAME_FIELD)) throw {noGood:val};
  this.prop = val;
}
var obj = new MyClass();

obj.setProp(NAME_FIELD.CAR); // no exception
obj.setProp('bip'); // throws an exception

しかし、列挙型はネイティブの構成要素ではないため、そのようなものを使用するかどうかはわかりません。これは、 「javascript で Java 機能を強制しようとしている」というにおいがしすぎます。おそらくこれは必要ありません。

于 2013-02-19T10:40:30.683 に答える