我创建了一个错误类层次结构,从一个纯粹用于子类化的BaseError类开始。我使用Object.create(Error.prototype)
设置原型,并使用当前子类的名称重写堆栈。名称在名为configure
的方法中设置,需要由子类实现。
问题是虽然我明确地将configure
方法添加到BaseError的原型中,但它实际上在原型链中是不可访问的。
我认为它与__proto__
实例属性与prototype
属性有某种关联。
这是代码(从Typescript定义中转换而来)
var BaseError = (function () {
function BaseError(msg) {
var err = Error.apply(null, arguments);
this.message = err.message;
this.configure();
if (err.stack) {
this.stack = rewriteStack(err.stack, this.name);
}
if (typeof this.name === 'undefined')
throw new NotImplementedError('must set "name" property in the configure call');
}
return BaseError;
})();
Framework.BaseError = BaseError;
// weird stuff need to happen to make BaseError pass an "instanceof Error"
BaseError.prototype = Object.create(Error.prototype);
BaseError.prototype.configure = function () {
throw new NotImplementedError(+' This method must be implemented in the overriding class!');
};
答案 0 :(得分:1)
您正在做Object.create(BaseError)
,而不是Object.create(BaseError.prototype)
。