3

以下のコードのようなカスタム 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}});
}
4

1 に答える 1