【问题标题】:Achieving member variable inheritance in JavaScript using "pseudoclassical" pattern使用“伪经典”模式在 JavaScript 中实现成员变量继承
【发布时间】:2014-03-27 22:52:29
【问题描述】:

中,Douglas 引入了所谓的“伪经典”模式作为实现继承的一种方式。但是,他给出的示例似乎无法实现成员变量的继承,因为原型继承在构造“子类”时不会创建“超类”变量的副本。

举一个具体的例子,让我们考虑两个类:一个InputStream类,它处理底层输入机制,并提供一个简单的read接口来逐字节读取;以及一个继承 InputStream 并提供 readUtf8 接口来读取有效 UTF8 字符的 Utf8InputStream 类。然后在“伪经典”模式下似乎有问题,因为所有 Utf8InputStream 将共享相同的底层 InputStream 并且事情显然会中断。

在我看来,使用组合代替继承很容易解决问题,但只是出于好奇,这里有没有实现成员变量的继承?

【问题讨论】:

标签: javascript oop inheritance


【解决方案1】:

然后在“伪经典”模式下似乎有问题,因为所有 Utf8InputStream 将共享相同的底层 InputStream,并且事情显然会中断。

不,当你做错了create an instance for the prototype时,就会发生这种情况。 Correct:

function Utf8InputStream(…) {
    InputStream.call(this, …);
    …
}
Utf8InputStream.prototype = Object.create(InputStream.prototype);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2016-04-10
    • 1970-01-01
    • 2016-12-03
    相关资源
    最近更新 更多