e compartimentado. O jQuery faz isso tambem, mas limita suas melhorias ao prototipo do objeto jQuery.Enquanto voce pode encadear multiplas chamadas a metodos no objeto jQuery, em qualquer outro tipo de objeto voce tem que utilizar genericos. Por exemplo, no jQuery, se voce quer remover os espacos do comeco e do final de uma string (trim) e iterar em linhas, voce tera de escrever: $.each( $.trim( $('span.something').html() ).split("\n"), function(i, line){alert(line);});Mas como o MooTools modifica os prototipos, voce pode: $('span.something').get('html').trim().split("\n").each(function(line){alert(line);});Apenas observando isso, vemos claramente o quao poderoso e alterar os prototipos. Encadeamento nos elementos DOM nao e o unico lugar onde o encadeamento e util. O MooTools permite que voce encadeie metodos em qualquer objeto, inclusive rodar um metodo em varios elementos de uma so vez.A chave aqui e que no coracao do MooTools framework mora a nocao que ela esta la para lhe ajudar a programar do jeito que voce quiser. Se existe alguma funcionalidade que nao esta no seu nucleo, voce pode estende-lo da sua maneira. O trabalho do nucleo nao e oferecer cada bit de funcionalidade que voces podem sequer querer um dia, mas oferecer as ferramentas que permitem voces escreverem as coisas da maneira que voces quiserem. Uma grande parte disso e deixar facil estender prototipos nativos e utilizar as vantagens da heranca prototipada. Voce pode fazer essas coisas com JavaScript puro, mas o MooTools faz essa tarefa mais facil e agradavel. MooTools e herancaApesar do seu nome, a funcao Class do MooTools nao e uma, nem cria classes. Ela possui padroes de desenvolvimento que podem lembrar as classes de linguagens de programacao mais tradicionais, mas, na verdade, Class e intimamente relacionada a objetos e heranca prototipada.Para criar um prototipo, voce envia um objeto para a funcao Class dessa maneira: var Human = new Class({ initialize: function(name, age) { this.name = name; this.age = age; }, isAlive: true, energy: 1, eat: function() { this.energy = this.energy + 1; //same as this.energy++ }});Voce passa um objeto a Class (acima, nos passamos um objeto com membros como isAlive e eat) e esse objeto se torna o prototipo de todos os objetos do tipo Human. Para criar um Human, voce faz assim: var bob = new Human("bob", 20); //bob's name is "bob" and he's 20 years old.Agora possuimos um descendente de Human, bob. bob possui as propriedades definidas no prototipo Human, mas e importante notar que, no inicio, essas propriedades existem em bob apenas atraves da heranca prototipada. Quando nos solicitamos bob.eat, bob nao possui realmente um metodo eat. A linguagem JavaScript procura por um metodo eat, nao encontra e entao ela sobe na cadeia de herancas ate encontra-lo no objeto Human, onde definimos Human.eat atraves da funcao Class. Isso ocorre tambem para a propriedade energy. A primeira vista, isso parece potencialmente ruim; afinal de contas, nao queremos que todos os humanos que criemos ganhem o valor de bob.energy a cada vez que bob come. O importante aqui e entender que na primeira vez que atribuirmos um valor para bob.energy, estaremos atribuindo o valor para uma propriedade que e realmente de bob