lucas1000001
lucas1000001

Reputation: 2750

The Benefits of JavaScript Prototype

I've been wondering about JavaScript's prototypal nature, and the benefits of it, and have come down to the following list :

1) Inheritance

cat.prototype = animal

2) Memory Efficiency

a.prototype.b = function() {}

var a1 = new a();
var a2 = new a();

Then a1.b and a2.b are essentially the same object, where as :

var a = function() {
             this.b = function() {}; 
        }

var a1 = new a();
var a2 = new a();

a1.b and a2.b would be different function objects and take up more memory.

3) Adding methods/fields to multiple, already created, 'out in the wild' objects.

var a = function() {}

var a1 = new a();
var a2 = new a();

a.prototype.b = function() {}

a1.b();
a2.b();

So the question is, are these correct?

... and are there any other benefits I've missed?

Cheers!

Upvotes: 11

Views: 3873

Answers (2)

DVK
DVK

Reputation: 129403

http://en.wikipedia.org/wiki/Prototype-based_programming#Comparison_with_class-based_models

Also, please see the discussion of prototype inheritance in the answers to this:

prototype based vs. class based inheritance

Upvotes: 1

palswim
palswim

Reputation: 12140

Those are all correct.

Of course, there are "drawbacks" as well:

No closures

function a() {
    var ival = 0;
    this.start = function(){ ival = setInterval(function(){ }, 300); }
    this.finish = function(){ clearTimeout(ival); }
}

compare to:

function a() {
    this.ival = 0;
}
a.prototype.start = function(){ this.ival = setInterval(function(){ }, 300); }
a.prototype.finish = function(){ clearTimeout(this.ival); }

Upvotes: 5

Related Questions