Принципиально отличающимся от замыканий шаблоном написания модулей является объявление полей и методов через prototype.
var Product = function (name, cost) {
this.name = name;
this.cost = cost;
};
Product.prototype.draw = function () {
// Комплексный метод создания представления продукта
// Доступ к полям экземпляра осуществляется только через this
};
Весомым аргументом для его использования является крайне малый расход памяти в связи с тем, что общие методы уже не копируются как привилегированные, а передаются экземплярам в виде ссылок.
К недостаткам же можно отнести:
- полное отсутствие частных полей (как правило, программисты оформляют такие поля символом «_» перед именем);
- доступ к полям экземпляра осуществляется только через this, так как это единственная связующая переменная между привилегированными и общими методами.
Если все-таки важно иметь действительно частные поля, защищенные от доступа извне, то запросто можно скомбинировать этот прием с замыканием.
var Product = function (name, cost) {
// частная переменная
var id = name + '-' + new Date().getTime();
// привилегированный метод для доступа к частной переменной
this.getId = function () {
return id;
};
// привилегированные поля
this.name = name;
this.cost = cost;
};