3
Я определяю пользовательские исключения JavaScript, как приведенный ниже код. Это правильно? Разве нет более короткого пути?Более короткий способ определения пользовательских исключений 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);
Edit: В конце концов, после того, как предложение Ориоль, я сделал функцию, которая генерирует исключения и выглядит следующим образом:
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}});
}
Я определения исключений. Кажется, что без наследования прототипа ('MyException.prototype = Object.create (BaseException.prototype);') исключения не печатаются в консоли браузера должным образом (возможно, я делаю что-то неправильно). – HankMoody
@PythonFanboy Я добавил метод 'toString', чтобы отобразить его хорошо. – Oriol
@PythonFanboy Я обновил его, чтобы генерировать реальные ошибки вместо объектов с '.toString' – Oriol