прототипное наследование в node.js

#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();
  

И тогда этот пример будет работать так, как вы ожидаете.