#inheritance #node.js
#наследование #node.js
Вопрос:
Я ищу способ, как выполнить прототипное наследование в node.js это соответствует моему собственному стилю программирования. Самое важное для меня — использовать переменные вместо «загрязнения» глобального пространства имен (если вам не нравится эта идея, пожалуйста, пропустите эту). Я нашел по меньшей мере полдюжины описаний по этой теме (в Google более 270000 записей по этому вопросу).
Вот что я нашел наиболее многообещающим вариантом, но я что-то не так понял:
> var A = function() {
... this.value = 1;
... };
> A.prototype.print = function() {
... console.log(this.value);
... }
[Function]
> var a = new A();
> a.print();
1
> var B = function() {
... this.value = 2;
... };
> B.prototype.__proto__ = A.prototype;
> b = B();
> b.print()
TypeError: Cannot call method 'print' of undefined
at [object Context]:1:3
at Interface.<anonymous> (repl.js:150:22)
at Interface.emit (events.js:42:17)
at Interface._onLine (readline.js:132:10)
at Interface._line (readline.js:387:8)
at Interface._ttyWrite (readline.js:564:14)
at ReadStream.<anonymous> (readline.js:52:12)
at ReadStream.emit (events.js:59:20)
at ReadStream._emitKey (tty_posix.js:286:10)
at ReadStream.onData (tty_posix.js:49:12)
Как только я узнаю, как это работает, я надеюсь, что смогу делать еще более сложные вещи, такие как:
var B = function() {
this.value = 2;
print();
}
Ответ №1:
Попробуйте использовать.наследует
Комментарии:
1. Спасибо за подсказку. Я видел дискуссию об устаревании util.inherits, поэтому я предпочитаю вариант prototype.__proto__, который я использовал в примере.
Ответ №2:
Вам нужно сделать:
b = new B();
И тогда этот пример будет работать так, как вы ожидаете.