What’s the purpose of prototype? [duplicate]

Using the prototype makes faster object creation since properties/methods on the prototype don’t have to be re-created each time a new object is created.

When you do this:

function animal() {
    this.name="rover"
    this.set_name = function (name) {
      this.name = name
    }
}

The set_name method is created every time you create an animal. But when you do this

animal.prototype.set_name = function (name) {
    this.name = name
}

The method does not have to be re-created each time; it exists in one place in the prototype. So when you call someAnimal.set_name("Ubu"); the this context will be set to someAnimal and (the one and only) set_name method will be called.


There is one advantage to using the first syntax though: methods created in this manner will have access to private data:

function animal() {
    var privateData="foo"

    this.name="rover"
    this.set_name = function (name) {
        this.name = name
        alert(privateData) //will alert 'foo'
    }
}

Douglas Crockford calls methods created like this “privileged” for that reason: they have access to both public and private data.

Leave a Comment