子类化错误:添加原型方法不会生效

时间:2015-11-20 14:49:49

标签: javascript prototype

我创建了一个错误类层次结构,从一个纯粹用于子类化的BaseError类开始。我使用Object.create(Error.prototype)设置原型,并使用当前子类的名称重写堆栈。名称在名为configure的方法中设置,需要由子类实现。

问题是虽然我明确地将configure方法添加到BaseError的原型中,但它实际上在原型链中是不可访问的。

Failing

我认为它与__proto__实例属性与prototype属性有某种关联。

__proto__

这是代码(从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!');
};

1 个答案:

答案 0 :(得分:1)

您正在做Object.create(BaseError),而不是Object.create(BaseError.prototype)