Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

java like inheritance and shameful use of prototype

View gist:778460
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
function Human(){
var that = this;
var name="John Doe";
that.getName=function(){return name;}
that.setName=function(value){name=value;}
return that;
}
 
function Man(){
var that = this.prototype = new Human();
this.prototype.constructor = Man;
//this.prototype.constructor = this;
var nickName = "Johnny";
that.getNickName=function(){return nickName;}
that.setNickName=function(value){nickName =value;}
that.toString = function(){return "Hello i am "+that.getName()+" aka "+nickName;}
return that;
}
 
var bob = new Man(); bob.setName("Bob"); bob.setNickName("Bobby");
var bill = new Man(); bill.setName("Bill"); bill.setNickName("Billy");
 
console.log(bob.toString());
console.log(bill.toString());
 
Human.prototype.helloWorld = function(){return "Hello World by "+ this.getName();}
 
console.log(bob.helloWorld());
console.log(bill.helloWorld());
 
console.log(bob);
console.log(bill);
 
function SuperHeroe(){
var that = this.prototype = new Man();
this.prototype.constructor = SuperHeroe;
//this.prototype.constructor = this;
var power = "?";
that.getPower = function(){return power};
that.setPower = function(value){power = value;}
return that;
}
 
var clarkkent = new SuperHeroe();
clarkkent.setName("Clark Kent");
clarkkent.setNickName("Smallville");
clarkkent.setPower("flying");
var peterparker = new SuperHeroe();
peterparker.setName("Peter Parker");
peterparker.setNickName("Pete");
peterparker.setPower("climbing");
 
console.log(clarkkent.toString()+" "+clarkkent.getPower());
console.log(peterparker.toString()+" "+peterparker.getPower());
console.log(clarkkent.helloWorld());
console.log(peterparker.helloWorld());
 
console.log(clarkkent);
console.log(peterparker);
 
Human.prototype.ditBonjour = function(){return "Salut à tous par "+ this.getName();}
 
console.log(clarkkent.ditBonjour());
console.log(peterparker.ditBonjour());
console.log(bob.ditBonjour());
console.log(bill.ditBonjour());
tdd commented

Faudra que tu m'expliques en quoi tu reste prototypal ici… Surtout en termes d'héritage.

Tes méthodes getName/setName au niveau Human ne sont pas dans le prototype de Human, par exemple. Ni ton toString sur Man, qui n'est qu'une privilégiée exploitant la closure. Idem pour getPower et setPower.

En plus de ça et pour finir, chaque instance ici a son propre prototype, réaffecté, indépendant d'une instance à l'autre. On est très loin de l'héritage prototypal classique…

Owner

voui, c'est pas faux. Mais j'ai complètement réglé mon pb de variables privées. Effectivement le titre est inapproprié. Mais je me sert qd même de prototype pour hériter du comportement du parent (de manière honteuse je sais) ;-)
Merci pour les remarques (ça me fait progresser)

Owner

Je vais donc changer le titre par "java like inheritance and shameful use of prototype"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.