Prototype Pattern


Problem


The new operator hard-wires the type of object to be created.

Solution


Specify the kinds of objects you'd like to be able to create, build a prototypical instance of that, and create new objects by cloning those prototypes.

Related Patterns


  • Factory (creation through inheritance, where Prototype is creation through delegation)
  • Abstract Factory
  • Composite
  • Decorator
  • Singleton

Discussion


Clients clone() the abstract base class, supplying an optional data type designating the desired subtype. The new operator is abandoned in favor of prototype cloning.

Examples


JavaScript uses prototypes extensively for object creation. The object constructor function in JS is the prototype for that object (which can be called with the new operator).

Code


JavaScript has string built-in support for prototypes:

var myprototype = function myprototypeobj(){
  this.foo = function(){alert("foo");};
  this.bar = function(){alert("bar");};
}
var myobj.prototype = myprototype;
myobj.foo(); myobj.bar(); // myobj is created with the methods of myprototype