gpt4 book ai didi

javascript - 子类化错误: adding prototype methods does not take effect

转载 作者:行者123 更新时间:2023-12-03 08:18:29 25 4
gpt4 key购买 nike

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

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

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!');
};

最佳答案

您正在执行 Object.create(BaseError),而不是您应该执行的 Object.create(BaseError.prototype)

关于javascript - 子类化错误: adding prototype methods does not take effect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829555/

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