function Cat() {
var private = Object.create(arguments.callee.prototype), public = Object
.create(private), arg = [ private, public ];
for ( var i = 0; i < arguments.length; i++) {
arg.push(arguments[i])
}
return arguments.callee.init.apply(this, arg)
}
Cat.addMethod = function(name, call) {
this.prototype[name] = function() {
var self = this.__proto__, private = self;
this.__proto__ = Cat.prototype;
self.__proto__ = this;
var arg = [ self, private, this ]
for ( var i = 0; i < arguments.length; i++) {
arg.push(arguments[i])
}
call.apply(this, arg)
self.__proto__ = Cat.prototype;
this.__proto__ = self;
}
}
Cat.init = function(private, public) {
// приватные свойства каждой сущности
private.name = 'приватное имя'
// публичные свойства каждой сущности
public.age = 'публичный возраст'
return public
}
// добавляем метод
Cat.addMethod('sayName', function(self, private, public) {
alert(self.name)
})
// добавляем метод
Cat.addMethod('setName', function(self, private, public, name) {
private.name = name
public.age = '200 лет'
})
//создаем кота
var cat = Cat();
//проверяем как зовут
cat.sayName(); //приватное имя
//меняем приватное имя к которому имеют доступ только методы, по этому через метод
cat.setName('Даша');
//проверяем как его теперь зовут
cat.sayName(); //Даша
//создаем публичное свойство name
cat.name = "Афанасий"
//проверяем что методами используется по прежнему приватное имя
cat.sayName(); //Даша
ура, классы работают!
Теперь надо создать класс классов)!!!