0

如何在throw new语句期间使用异常名称中的变量引发异常?

我有一个我试图抛出的异常列表,具体取决于一个变量的长度是否为零。例如,异常的名称包含变量名称。

作品

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

您正在尝试将字符串转换为函数并创建变量的新实例,但这是行不通的。

有几种方法可以获取字符串对应的函数:How to turn a String into a javascript function call?

但是解决这个问题的更好方法是简单地执行第一个 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 回答