gpt4 book ai didi

javascript - 定义自定义 JavaScript 异常的更短方法?

转载 作者:行者123 更新时间:2023-11-29 14:54:27 25 4
gpt4 key购买 nike

我正在定义自定义 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");

关于javascript - 定义自定义 JavaScript 异常的更短方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com