javascript prototype

I would to extend the functionality of a JavaScript class, for example, to add utility functions to a specific Object.

Object.prototype

The prototype property can be used to add new properties and functions to any object, including built-in objects. For example, you could extend an Array as follows:

//
// extend Array objects, test if value is in array
// e.g.,  [0,1,2].contains(2) == true
//        [0,1,2].contains('spam') == false
Array.prototype.contains = function(obj) {
  for (var i = 0; i < this.length; i++) {
    if (this[i] == obj) {
      return true;
    }
  }
  return false;
}

This will add the contains() function to all Array objects, even those already instantiated. The prototype property can be used to dynamically add new properties to all objects of a specific type, for example:

function Spam(name, eggs) {
  this.name = name;
  this.eggs = eggs;
}
function Foo(eggs) {
  this.eggs = eggs;
}

myspam = new Spam('Brian', 12);
myfoo = new Foo(36);

function eggsByDozen() {
  return this.eggs / 12;
}
Spam.prototype.dozens = eggsByDozen;
Foo.prototype.dozens = eggsByDozen;

myspam.dozens() // returns 1
myfoo.dozens() // returns 3

In this case, an existing function eggsByDozen() is applied to multiple classes, new objects and even previously instantiated objects of those types will have the new method.

This entry was posted in javascript. Bookmark the permalink.

Comments are closed.