11

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!

lucas1000001
  • 2,740
  • 1
  • 25
  • 22

2 Answers2

6

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); }
palswim
  • 11,856
  • 6
  • 53
  • 77
2

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

Community
  • 1
  • 1
DVK
  • 126,886
  • 32
  • 213
  • 327