Я понимаю базовые псевдоклассы JavaScript:
function Foo(bar) {
this._bar = bar;
}
Foo.prototype.getBar = function() {
return this._bar;
};
var foo = new Foo('bar');
alert(foo.getBar()); // 'bar'
alert(foo._bar); // 'bar'
Я также понимаю шаблон модуля, который может эмулировать инкапсуляцию:
var Foo = (function() {
var _bar;
return {
getBar: function() {
return _bar;
},
setBar: function(bar) {
_bar = bar;
}
};
})();
Foo.setBar('bar');
alert(Foo.getBar()); // 'bar'
alert(Foo._bar); // undefined
Но для обоих этих шаблонов существуют свойства, отличные от OOP. Первый не обеспечивает инкапсуляцию. Последнее не дает инстанцирования. Оба шаблона могут быть изменены для поддержки псевдонаследования.
Я хотел бы знать, есть ли какой-либо шаблон, который позволяет:
- Наследование
- Инкапсуляция (поддержка свойств/методов "private")
- Активация (может иметь несколько экземпляров "класса", каждый со своим собственным состоянием)