Я читал, что частное состояние объектов экземпляра обычно не рекомендуется, и я был бы признателен за помощь в указании недостатков/недостатков следующей реализации. Советуем/критикуем.Недостатки со следующей реализацией частного объекта объектов экземпляра
var namespace = {};
namespace.parent = {
parent_method1 : function() {},
parent_method2 : function() {}
};
namespace.child = function (properties) {
var private="secret";
this.prototype = {
create : function() {
this.unique = 'base';
this.unique += this.properties;
return this.unique;
},
get_private: function() {
console.log(private);
},
set_private: function (val) {
private = val;
}
};
var proto = Object.create(namespace.parent);
var instance = Object.create(proto);
for (var property in this.prototype) {
if (this.prototype.hasOwnProperty(property)) {
proto[property] = this.prototype[property];
}
}
instance.properties = properties;
return instance;
};
var a = namespace.child("a");
console.log(a.create());
a.get_private();
a.set_private("new_a_secret");
a.get_private();
var b = namespace.child("b");
console.log(b.create());
b.get_private();
a.get_private();
Ну, тогда это не сработает, так как ни 'a', ни' b' не являются реальными. – Bergi
namespace.child должен быть фабричной функцией, которая производит классы; init() - лучший способ называть функцию инициализации .unique был использован (confusingly?), чтобы показать, что они возвращают что-то уникальное на основе .properties. Сохранение строки - всего лишь пример. get_private, set_private и create (well init) должны быть разделены между каждым экземпляром класса (включая parent_method1 и parent_method2), есть ли лучший способ сделать их все разделяемыми с факторизуемыми классами, возможно, на одном уровне наследования, как вы предложили ? – humand
Проблема в том, что 'create' (или' init') фактически инициализирует * сам класс *, а не создает * экземпляр класса *. Ваша терминология «*, разделяемая между каждым экземпляром класса *» является двусмысленной, вы имеете в виду объекты класса или объекты экземпляра? – Bergi