11.02.2012, 20:09
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
Классы в javascript?
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(); //Даша
ура, классы работают!
Теперь надо создать класс классов)!!!
Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 22:25.
|
|
11.02.2012, 20:10
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Mахmахmахimus,
нет на тебя Валеры ...
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
11.02.2012, 20:14
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
self - все свойства сущности, сначала ищутся приватные потом публичные
private - сюда добавляются приватные свойства
public - сюда добавляются публичные свойства
Есть идеи как убрать вот эти страшные некрасивые куски кода и не писать их каждый раз?
Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 21:20.
|
|
11.02.2012, 21:24
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
Все таки я сделал это)) осталось только как то подправить код) и сделать чтобы было красиво и не тупило.
Может придумать класс классов)?
Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 22:10.
|
|
11.02.2012, 22:19
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
У меня вопрос, публичные методы могут иметь доступ приватным свойствам сущности?
Так же у меня вопрос, есть наверное какие-то либы с классами я как полагаю меня посетила мысль что я пишу велосипед)?
Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 22:27.
|
|
11.02.2012, 22:30
|
|
:-/
|
|
Регистрация: 28.09.2009
Сообщений: 1,126
|
|
Сообщение от Mахmахmахimus
|
У меня вопрос, публичные методы могут иметь доступ приватным свойствам сущности?
Так же у меня вопрос, есть наверное какие-то либы с классами я как полагаю меня посетила мысль что я пишу велосипед)?
|
забей на классы болт, сходи пивка попей)
|
|
11.02.2012, 22:34
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
Сообщение от Shaci
|
забей на классы болт, сходи пивка попей)
|
А фраза то крылатая)
|
|
11.02.2012, 22:53
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Сообщение от Mахmахmахimus
|
У меня вопрос, публичные методы могут иметь доступ приватным свойствам сущности?
|
Да. А вообще возьми да попробуй!
Код:
|
#include <iostream>
class MyClass
{
public:
void set(int x)
{
this->x = x;
}
void show()
{
std::cout << this->x << std::endl;
}
private:
int x;
};
int main()
{
MyClass obj;
obj.set(5);
obj.show();
return 0;
} |
http://codepad.org/Qd3Ezpdx
|
|
11.02.2012, 23:07
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
Сообщение от Octane
|
Да. А вообще возьми да попробуй!
|
хах) неет, я спрашиваю как мне делать нужно чтобы имели или чтобы нет)
А мне вот кажется что не должны, иначе теряется смысл приватности.
То есть если я в уже созданного кота добавлю какой то метод через точку, то с какого хрена он вообще будет иметь доступ к его приватным свойствам???
вот если внутри класса опишу публичные методы, то да, они будут иметь доступ)
Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 23:16.
|
|
11.02.2012, 23:31
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Не знаю, посмотри, как это работает, например, в ActionScript
|
|
|
|