MooTools provides the user with a number of options beyond native JavaScript. These include:
An extensible and modular framework allowing developers to choose their own customized combination of components.[6]
MooTools follows object-oriented practices and theDRY principle.[7]
An advanced effects component, with optimized transitions such as easing equations used by many Flash developers.[8]
Enhancements to theDOM, enabling developers to easily add, modify, select, and delete DOM elements. Storing and retrieving information with Element storage is also supported.[9]
The framework includes built-in functions for manipulation ofCSS,DOM elements, native JavaScript objects,Ajax requests, DOM effects, and more. MooTools also provides a detailed, coherentapplication programming interface (API),[10] as well as a custom downloads module allowing developers to download only the modules and dependencies they need for a particular app.[11][12]
Valerio Proietti first authored the framework and released it in September 2006[13] taking as his inspirationPrototype and Dean Edward'sbase2. MooTools originated from Moo.fx, a popularJavaScript effects library released in October 2005 by Valerio Proietti as an add-on to thePrototype Javascript Framework.[14] It can be used as a lighter alternative toscript.aculo.us or other, bigger libraries. It provides simple, basic effects, and guarantees a small library size.
Whereas Prototype extended—prototyped—many of JavaScript's native String, Array, and Function objects with additional methods, Proietti desired a framework that (at the time)[15] further extended the native Element object as well[13] to offer greater control of theDocument Object Model (DOM).[16]
Every JavaScript framework has its philosophy, and MooTools is interested in taking full advantage of the flexibility and power of JavaScript in a way that emphasizes greater modularity and code reuse. MooTools accomplishes these goals intuitively to a developer coming from aclass-based inheritance language like Java with the MooToolsClass object.
Class is an object of key/value pairs containing either properties or methods (functions).Class is effortlessly mixed and extended with other Class instantiations allowing for the most excellent focus of MooTools: Code reuse achieved through maximizing the power of JavaScript's prototypical inheritance but in aClass object syntax more familiar to classical inheritance models.[25]
MooTools contains a robust Class creation and inheritance system that resembles most classically basedObject-oriented programming languages. For example, the following is MooTools' equivalent of theexamples in Wikipedia's polymorphism page:
varAnimal=newClass({initialize:function(name){this.name=name;}});varCat=newClass({Extends:Animal,talk:function(){return'Meow!';}});varDog=newClass({Extends:Animal,talk:function(){return'Arf! Arf!';}});varanimals={a:newCat('Missy'),b:newCat('Mr. Bojangles'),c:newDog('Lassie')};Object.each(animals,function(animal){alert(animal.name+': '+animal.talk());});// alerts the following://// Missy: Meow!// Mr. Bojangles: Meow!// Lassie: Arf! Arf!
^Version 1.6.1 of Prototype includes "an element metadata storage system."Prototype 1.6.1 releasedArchived 2010-03-01 atarchive.todayby Sam Stephenson, written September 1st, 2009. Retrieved March 21, 2010.
^Note that MooTools does not extend the native Object—all JavaScript primitives like String and Function inherit from it—but instead provides a convenient Hash for the purpose: Think of it like having a set of utility methods that allow for nearly effortless object manipulation of regular JavaScript objects that are otherwise unaffected by the process. (Newton, Aaron (September 18, 2008).MooTools Essentials: The Official MooTools Reference for JavaScript and Ajax Development (1st ed.).Apress. pp. xvi.ISBN978-1-4302-0983-6.)