Mixins with Dojo
Ninja and Samurai are extending the Human mixing it with Warrior
HTML
<div id='result'></div>
CSS
#result {
margin-top: 10px;
color: navy;
font-weight: bold;
font-size: 11px;
font-family: Helvetica, Tahoma, Arial;
}
JavaScript
var printData = function(obj){
dojo.create('p', {
'innerHTML': obj.name + ' - energy: ' + obj.energy + ', alive: ' + obj.isAlive
}, 'result');
};
// --------------------------------
dojo.declare("Human", null, {
constructor: function(kwArgs) {
dojo.mixin(this, kwArgs);
},
isAlive: true,
energy: 1,
eat: function(){
this.energy++;
}
});
// -------------------------------
dojo.declare("Warrior", null, {
energy: 100,
kills: 0,
attack: function(target){
if (target.energy < this.energy) {
target.isAlive = false;
this.kills++;
}
this.energy = this.energy - 5;
}
});
// -------------------------------
dojo.declare("Ninja", [Human, Warrior], {
});
// -------------------------------
dojo.declare("Samurai", [Human, Warrior], {
side: 'good', // Samurai is always on the good side
energy: 1000
});
/*
This is were you should start to play
*/
var bob = new Human({name:'Bob', age:25});
var blackNinja = new Ninja({side:'evil', name:'Nin Tendo', age:'unknown'});
var redSamurai = new Samurai({side:'good', name:'Mario', age:'28'});
printData(bob);
printData(blackNinja);
printData(redSamurai);
blackNinja.attack(bob);
printData(bob);
printData(blackNinja);
blackNinja.attack(redSamurai);
printData(redSamurai);
printData(blackNinja);
redSamurai.attack(blackNinja);
printData(redSamurai);
printData(blackNinja);