Я задавался вопросом о prototypal характере JavaScript и преимуществах его, и свелся к следующему списку:
1) Наследование
cat.prototype = animal
2) Эффективность памяти
a.prototype.b = function() {}
var a1 = new a();
var a2 = new a();
Затем a1.b и a2.b являются по существу тем же объектом, где как:
var a = function() {
this.b = function() {};
}
var a1 = new a();
var a2 = new a();
a1.b и a2.b были бы различными функциональными объектами и подняли бы больше памяти.
3) Добавление методов/полей нескольким, уже созданным, 'в диких' объектах.
var a = function() {}
var a1 = new a();
var a2 = new a();
a.prototype.b = function() {}
a1.b();
a2.b();
Таким образом, вопрос, они корректны?
... и есть ли какие-либо другие преимущества, которые я пропустил?
Удачи!
Все верно.
Конечно, есть и «недостатки»:
Нет закрытий
function a() {
var ival = 0;
this.start = function(){ ival = setInterval(function(){ }, 300); }
this.finish = function(){ clearTimeout(ival); }
}
по сравнению с:
function a() {
this.ival = 0;
}
a.prototype.start = function(){ this.ival = setInterval(function(){ }, 300); }
a.prototype.finish = function(){ clearTimeout(this.ival); }
http://en.wikipedia.org/wiki/Prototype-based_programming#Comparison_with_class-based_models
Также см. Обсуждение наследования прототипов в ответах на этот вопрос: