0

throw newステートメント中に例外名内の変数を使用して例外をスローするにはどうすればよいですか?

1 つの変数の長さがゼロかどうかに応じてスローしようとしている例外のリストがあります。たとえば、例外の名前には変数名が含まれます。

作品

if (X.length === 0)
{
    throw new NoXException();
}

if (Y.length === 0)
{
    throw new NoYException();
}

if (Z.length === 0)
{
    throw new NoZException();
}

動作しません

var X = 'Oh';
var Y = 'Hai';
var Z = '';

// Contains "NoZException"
var ex = "No" + ((X.length != 0) ? ((Y.length != 0) ? 'Z' : 'Y') : 'X') + "Exception";

// Throwing ex gives an error
throw new ex();
4

1 に答える 1

4

文字列を関数に変換し、変数の新しいインスタンスを作成しようとしていますが、うまくいきません。

文字列に対応する関数を取得する方法があります: 文字列を JavaScript 関数呼び出しに変換する方法は?

しかし、これを行うより良い方法は、単純に最初の if ステートメントを実行するか、それを switch に変換することです。

グローバル変数の場合:

// Set up in global scope, not in the scope of something else.
var NoXException = function () { ... }

var variable = "No" + getMissing() + "Exception";
throw new window[variable]()

別のスコープ内に格納されている変数の場合:

var exceptions = {}
exceptions.NoXException = function () { ... }

var variable = "No" + getMissing() + "Exception";
throw new exceptions[variable]()
// Alternatively
throw new window['exceptions'][variable]()
于 2013-07-11T11:11:41.893 に答える