JavaScript классы
Я понимаю базовые псевдоклассы 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
Но у обоих этих шаблонов есть не-ООП-подобные свойства. Первый не обеспечивает инкапсуляцию. Последнее не обеспечивает реализации. Оба шаблона могут быть изменены для поддержки псевдонаследования.
Я хотел бы знать, существует ли какая-либо модель, которая позволяет:
Inheritance Encapsulation (support for "private" properties/methods) Instantiation (can have multiple instances of the "class", each with its own state)