Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定义自定义JavaScript异常的较短方法?_Javascript_Custom Exceptions - Fatal编程技术网

定义自定义JavaScript异常的较短方法?

定义自定义JavaScript异常的较短方法?,javascript,custom-exceptions,Javascript,Custom Exceptions,我正在定义自定义JavaScript异常,如下面的代码。这样合适吗?有没有较短的路 function InvalidModuleError(moduleName) { TypeError.apply(this); this.message = "module '" + moduleName + "' doesn't export any definitions"; this.name = 'InvalidModuleError'; }; InvalidModuleErr

我正在定义自定义JavaScript异常,如下面的代码。这样合适吗?有没有较短的路

function InvalidModuleError(moduleName) {
    TypeError.apply(this);
    this.message = "module '" + moduleName + "' doesn't export any definitions";
    this.name = 'InvalidModuleError';
};

InvalidModuleError.prototype = Object.create(TypeError.prototype);


function DuplicateModuleError(moduleName) {
    TypeError.apply(this);
    this.message = "module '" + moduleName + "' is already defined";
    this.name = 'DuplicateModuleError';
};

DuplicateModuleError.prototype = Object.create(TypeError.prototype);
编辑:最终,在Oriol的建议下,我制作了一个生成异常的函数,如下所示:

function makeException(parentObject, parentClass, name, message) {
    var shortName = name.split('.');
    shortName = shortName[shortName.length - 1];
    parentObject[shortName] = function() {
        this.message = (typeof message === 'function') ? message.apply(null, arguments) : message;
    };
    parentObject[shortName].prototype = Object.create(parentClass.prototype, {'name': {'value': name}});
}

您的代码可以简化一点:

function InvalidModuleError(moduleName) {
    this.message = "module '" + moduleName + "' doesn't export any definitions";
}
InvalidModuleError.prototype = new Error();
InvalidModuleError.prototype.name = 'InvalidModuleError';

function DuplicateModuleError(moduleName) {
    this.message = "module '" + moduleName + "' is already defined";
}
DuplicateModuleError.prototype = new Error();
DuplicateModuleError.prototype.name = 'DuplicateModuleError';
但是如果你想有很多自定义的异常,最好使用

function newModuleError(errorName, message) {
    var moduleError = function(moduleName) {
        this.message = message.replace('%s', moduleName);
    };
    moduleError.prototype = new Error();
    moduleError.prototype.name = errorName;
    return moduleError; 
};

var InvalidModuleError = newModuleError('InvalidModuleError', "module '%s' doesn't export any definitions"),
    DuplicateModuleError = newModuleError('DuplicateModuleError', "module '%s' is already defined");
要扔掉它们:

throw new InvalidModuleError("moduleName1");
throw new DuplicateModuleError("moduleName2");

我正在定义例外。似乎,如果没有原型继承(
MyException.prototype=Object.create(BaseException.prototype);
),浏览器控制台中不会正确打印异常(可能是我做错了什么).@PythonFanboy我已经添加了一个
toString
方法来很好地显示它。@PythonFanboy我已经更新了它,以抛出真正的错误,而不是带有
的对象。toString