Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Классы в javascript? (https://javascript.ru/forum/misc/25651-klassy-v-javascript.html)

Mахmахmахimus 11.02.2012 20:09

Классы в 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(); //Даша

ура, классы работают!
Теперь надо создать класс классов)!!!

Nekromancer 11.02.2012 20:10

Mахmахmахimus,
нет на тебя Валеры ...

Mахmахmахimus 11.02.2012 20:14

self - все свойства сущности, сначала ищутся приватные потом публичные
private - сюда добавляются приватные свойства
public - сюда добавляются публичные свойства

Есть идеи как убрать вот эти страшные некрасивые куски кода и не писать их каждый раз?

Mахmахmахimus 11.02.2012 21:24

Все таки я сделал это)) осталось только как то подправить код) и сделать чтобы было красиво и не тупило.
Может придумать класс классов)?

Mахmахmахimus 11.02.2012 22:19

У меня вопрос, публичные методы могут иметь доступ приватным свойствам сущности?
Так же у меня вопрос, есть наверное какие-то либы с классами я как полагаю меня посетила мысль что я пишу велосипед)?

Shaci 11.02.2012 22:30

Цитата:

Сообщение от Mахmахmахimus (Сообщение 156838)
У меня вопрос, публичные методы могут иметь доступ приватным свойствам сущности?
Так же у меня вопрос, есть наверное какие-то либы с классами я как полагаю меня посетила мысль что я пишу велосипед)?

забей на классы болт, сходи пивка попей)

Mахmахmахimus 11.02.2012 22:34

Цитата:

Сообщение от Shaci
забей на классы болт, сходи пивка попей)

А фраза то крылатая)

Octane 11.02.2012 22:53

Цитата:

Сообщение от 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

Mахmахmахimus 11.02.2012 23:07

Цитата:

Сообщение от Octane
Да. А вообще возьми да попробуй!

хах) неет, я спрашиваю как мне делать нужно чтобы имели или чтобы нет)
А мне вот кажется что не должны, иначе теряется смысл приватности.

То есть если я в уже созданного кота добавлю какой то метод через точку, то с какого хрена он вообще будет иметь доступ к его приватным свойствам???

вот если внутри класса опишу публичные методы, то да, они будут иметь доступ)

Octane 11.02.2012 23:31

Не знаю, посмотри, как это работает, например, в ActionScript


Часовой пояс GMT +3, время: 16:22.