Преимущества прототипа JavaScript
Мне было интересно о прототипном характере JavaScript и о его преимуществах, и пришли к следующему списку:
1) Наследование
cat.prototype = animal
2) Эффективность памяти
a.prototype.b = function() {}
var a1 = new a();
var a2 = new a();
Тогда a1.b и a2.b по существу являются одним и тем же объектом, где as:
var a = function() {
this.b = function() {};
}
var a1 = new a();
var a2 = new a();
a1.b и a2.b будут разными объектами функции и занимают больше памяти.
3) Добавление методов/полей к нескольким уже созданным объектам "out in the wild".
var a = function() {}
var a1 = new a();
var a2 = new a();
a.prototype.b = function() {}
a1.b();
a2.b();
Итак, вопрос в том, правильны ли они?
... и есть ли другие преимущества, которые я пропустил?
Ура!
Ответы
Ответ 1
Все верно.
Конечно, есть и "недостатки":
Без закрытия
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); }
Ответ 2
http://en.wikipedia.org/wiki/Prototype-based_programming#Comparison_with_class-based_models
Кроме того, посмотрите ответы на наследование прототипа в ответах на это:
прототип на основе наследования на основе класса