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