2011-04-25 4 views
0

Je cherche un moyen de faire l'héritage prototypal dans node.js qui correspond à mon propre style de programmation. Le plus important pour moi est d'utiliser des variables au lieu de "polluer" l'espace de noms global (si vous n'aimez pas cette idée, sautez celle-ci). J'ai trouvé au moins une demi-douzaine de descriptions sur le sujet (google a plus de 270000 entrées sur celui-là).héritage prototypique dans node.js

Voici ce que j'ai trouvé la variante la plus prometteuse, mais j'ai quelque chose de mal:

> 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) 

Une fois que j'ai découvert comment cela fonctionne, je l'espère, je peux faire des choses encore plus compliquées comme:

var B = function() { 
    this.value = 2; 
    print(); 
} 

Répondre

1

Vous devez faire:

b = new B(); 

Et puis cet exemple fonctionnera comme prévu.

+0

génial! Merci beaucoup, tu as sauvé ma journée – mark

2

Essayez util.inherits

+0

Merci pour l'indice. J'ai vu une discussion sur déprécier util.inherits c'est pourquoi je préfère le prototype .__ proto__ variante que j'ai utilisé dans l'exemple. – mark

+0

Intéressant, avez-vous des liens? –