comecam com um valor inicial energy de 100. Eles escolhem um side. Eles tambem possuem um metodo attack que os permitem matar outros Human, mas isso custa energy. var bob = new Human('Bob', 25);var blackNinja = new Ninja('Nin Tendo', 'unknown', 'evil');//blackNinja.isAlive = true//blackNinja.name = 'Nin Tendo'blackNinja.attack(bob);//bob never had a chanceDeixando isso um pouco de lado, existem algumas coisas interessantes a se considerar. Note que ao definirmos Ninja atraves de Class, enviamos novamente uma funcao initialize. Isso sobrescreve o metodo initialize de Human, mas ainda podemos acessar o metodo initialize de Human atraves da chamada this.parent com os argumentos que o metodo initialize de Human espera. Alem do mais, podemos controlar quando nossa logica acontece; antes ou depois da chamada ao seu pai. Podemos atribuir novos valores para as propriedades (como energy. por exemplo) e podemos definir nova funcionalidade. Imagine se pudessemos fazer isso com nosso plug-in faq da jQuery. Poderiamos carregar nosso AJAX e entao disparar a animacao (slideToggle).A MooTools possui outro padrao chamado Mixin. Ao contrario do relacionamento pai para filho que e definido estendendo um prototipo em um sub-prototipo, voce pode definir prototipos que sao misturados em outras classes para altera-las com suas propriedades. Veja um exemplo: var Warrior = new Class({ energy: 100, kills: 0, attack: function(target) { target.isAlive = false; this.energy = this.energy - 5; this.kills++;}});Neste exemplo, nos separamos as caracteristicas que fazem um Ninja diferente de um Human e as colocamos em um prototipo proprio. Isso nos permite reutilizar este codigo independentemente de Ninja. Poderiamos entao embutir nosso Ninja com as caracteristicas de um Warrior: var Ninja = new Class({ Extends: Human, Implements: Warrior, //can be an array if you want to implement more than oneinitialize: function(name, age, side) { this.side = side; this.parent(name, age); }});Ninja ainda funcionara como anteriormente, mas o prototipo Warrior continua a nossa disposicao para ser reutilizado: var Samurai = new Class({ Extends: Human, Implements: Warrior, side: 'good'});Agora temos um prototipo Samurai e um Ninja. Mas olhe como foi necessario escrever pouco para definir tanto Ninja como Samurai. Ambos sao semelhantes sob o ponto de vista que sao Human com qualidades de Warrior, mas sao diferentes sob os aspecto do Samurai ser sempre bom, enquanto um Ninja pode pertencer a ambos os lados. Gastando o tempo escrevendo Human e Warrior, somos capazes de escrever tres diferentes prototipos sem nenhuma repeticao de codigo e ainda mantemos um nivel de controle cirurgico sobre quando os metodos sao chamados e como estao relacionados entre si. Cada instancia que criamos possui seu proprio estado e seu codigo e bem legivel.Agora que voce teve uma visao geral de como os prototipos funcionam na MooTools, vamos olhar para nosso faq que escrevemos com o jQuery, escreve-lo como deveriamos no MooTools e estende-lo para adicionar AJAX, da mesma forma que fizemos com o jQuery. var FAQ = new Class({ //Options is another class provided by MooTools Implements: Options, //these are the default options options: { terms: 'dt', definitions: 'dd' }, initialize: function(container, options) { //we store a reference to our container this.container = $(container); //setOptions is a method provided by