e assim a linguagem nao ira mais procurar a propriedade nos objetos acima na cadeia de heranca. Portanto, na primeira vez que bob come, ele recebe sua propria definicao de energy (que e 2). bob.eat(); //bob.energy == 2Note que as propriedades name e age sao proprias de bob; elas foram atribuidas a ele no momento que o criamos atraves da funcao initialize que passamos para Class.Esse padrao pode parecer estranho para voce, mas o importante aqui e que podemos definir funcionalidades para um padrao e criar instancias desse padrao toda vez que precisarmos dele. Cada instancia mantem seu proprio estado. Entao se criamos outras instancias, elas serao todas umas independentes das outras, mas herdarao do mesmo prototipo: var Alice = new Human();//alice.energy == 1//bob.energy == 2As coisas comecam a ficar realmente interessantes quando aumentamos esse comportamento. Estendendo e implementando classesVamos rever nosso plug-in faq da jQuery. O que aconteceria se quisessemos incluir mais funcionalidades a esse plug-in? E se quisessemos fazer uma versao AJAX que procura as respostas para as questoes no servidor? Vamos imaginar que esse plug-in faq foi escrito por outra pessoa e que gostariamos de incluir mais coisas nele sem altera-lo de forma alguma (nao queremos fazer um fork dele).Nossas unicas chances reais sao: ou duplicar a logica do plug-in faq completamente (lembre-se, e apenas uma funcao), essencialmente criando um fork, ou podemos chama-la e depois incluir um pouco mais de funcionalidades nela. Dadas as escolhas, a segunda parece nos salvar da maioria dos problemas. O codigo ficaria mais ou menos assim: jQuery.fn.ajaxFaq = function(options) { var settings = jQuery.extend({ //some ajax specific options like the url to request terms from url: ...definitions: 'dd' }, options); //"this" is the current context; in this case, the elements we want to turn into faq layouts $(this).find(settings.definitions).click(function() { $(this).load(.....); //the logic to load the content from the term }); this.faq(); //call our original faq plug-in});Isso tem alguns contras. O primeiro de todos, nossa faq ira repetir os seletores para as respostas, o que pode ser custoso; nao ha nenhuma forma de guardar a resposta retornada e passa-la adiante para uma segunda vez que precisemos dela. Segundo, nos nao podemos incluir nossa logica AJAX no meio da logica do plug-in faq a fim de mostrar a resposta. O plug-in original chamou, slideToggle que expande a resposta usando um efeito. Isso e problematico porque esse efeito ira ocorrer antes de o nosso AJAX terminar de carregar. Nao ha nenhuma solucao aqui a nao ser duplicar o plug-in faq por inteiro.Agora vamos considerar nosso prototipo Human. Ele tem propriedades como isAlive e energy e um metodo chamado eat. O que acontece se quisessemos fazer uma nova versao de Human que tivesse mais propriedades? Com o MooTools, nos estendemos: var Ninja = new Class({ Extends: Human, initialize: function(name, age, side) { this.side = side; this.parent(name, age); }, energy: 100, attack: function(target) { this.energy = this.energy - 5; target.isAlive = false; }});Voce pode ver que incluimos um bocado de funcionalidades aqui em um sub-prototipo. Esse sub-prototipo possui todas as propriedades que sao unicas para os ninjas. Ninjas