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 23:54

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

Octane 12.02.2012 00:00

Не знаю ActionScript, в C++ классы статичны, ничего "потом" добавить не получится

Mахmахmахimus 12.02.2012 00:07

Цитата:

Сообщение от Octane
в C++ классы статичны, ничего "потом" добавить не получится

Шикарно)! значит у нас получатся протоклассы)!

попробую даже сделать без __proto__

FINoM 12.02.2012 00:33

Где наследование? Где статичные объекты?

FINoM 12.02.2012 00:34

Ну и, соответственно, protected.

Mахmахmахimus 12.02.2012 00:36

Цитата:

Сообщение от FINoM
Где наследование? Где статичные объекты?


что такое статичные обьекты?

п.с. вопрос, вот так описывать класс удобно будет?

var Cat = Class(function Cat() {
	this.private({
	    a : 20,
	    spead : 20
	})
	this.protected({

	})
	this.public({

	})
	this.static({

	})
});


private это то что будут иметь каждое созданное существо персонально для себя при том не видное снаружи

protected пока сам не понял до конца что это

public это аналог слова this в обычных конструкторах, у каждого существа будут личные публичные свойства.

static это как прототип, существ, все static свойства будут доступны всем существам и будут общими на всех, если добавить в прототип новое свойство, то оно автоматически появится у всех существ.

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

FINoM 12.02.2012 00:41

Цитата:

Сообщение от Mахmахmахimus
что такое статичные обьекты?

Для всех экземпляров класса этот объект один, а не разный, как у паблика. То есть, ты поменял статичный объект в одном экземпляре класса, а он фигак, и в другом поменялся.

Mахmахmахimus 12.02.2012 00:46

это как prototype по сути? Общие на всех свойства.

monolithed 12.02.2012 01:01

Цитата:

Сообщение от Octane
в C++ классы статичны, ничего "потом" добавить не получится

Теоретически можно создать фабрику объектов через шаблоны в связке со smart pointer's. В этом случае можно получить новый объект в рантайме, а само назначение имени объекта будет иметь вид new Class('Foo')

Цитата:

Сообщение от Mахmахmахimus
static это как прототип

Не совсем, это свойство доступное в пределах класса, т.е. к нему можно обращаться как глобальному объекту, но за пределами класса оно не доступно.

Цитата:

Сообщение от http://msdn.microsoft.com/ru-ru/library/f4ewhdb8.aspx
Модификатор static указывает, что член класса принадлежит самому классу, а не его экземпляру. Даже если в отдельном приложении создается множество экземпляров класса, в нем существует только одна копия члена с модификатором static. При доступе к члену с модификатором static следует ссылаться на класс, на не на его экземпляр. Однако в рамках объявления члена класса к членам static можно обращаться с помощью объекта this.

Модификатором static можно помечать члены классов. Классы, интерфейсы и члены интерфейсов не могут иметь модификатора static.

Цитата:

Сообщение от Mахmахmахimus
Кстати может ты знаешь, допустим ты описал класс, потом создал им кота, потом добавляешь в класс новые протект методы, начнет ли их иметь уже созданный кот?

Ну и нафига это? Мне кажется ты путаешь с полиморфизмом:

#include <iostream>
#include <string>

using namespace std;
 
class A {};
class B {};

template <typename T> class Foo {};

template <> class Foo <A>
{
	public:
		void get() {
			cout << "Class A" << endl;
		}
};

template <> class Foo <B>
{
	public:
		void get() {
			cout << "Class B" << endl;
		}
};


int main() {
	Foo<A> a;
	Foo<B> b;

	a.get(); //Class A
	b.get(); //Class B

	return 0;
}


http://codepad.org/cgzfHj9X

Mахmахmахimus 12.02.2012 01:09

//создание создавателя классов
(function(name) {
	init = {}
	init.class = {}

	init.private = function() {

	}
	init.protected = function() {

	}
	init.public = function() {

	}
	init.static = function() {

	}

	window[name] = function Class(class) {
		init.class = {} //очищаем кастрюлю от предыдущего "сваренного" класса
		class.call(init)
		return init.class
	}
})('Class')

//пример создания класса
var Cat = Class(function Cat() {
	this.private({
	    a : 20,
	    spead : 20
	})
	this.protected({

	})
	this.public({

	})
	this.static({

	})
});


вот каркас того что я начал делать, по сути функция Class принимает функцию описывающую класс, каким образом? вызывая определенные методы относительно this и суя с них обьекты.

так вот фунция Class принимает эту функцию и вызывает относительно обьекта init который хранится в её замыкании, методы в этом init что-то делают с полученнынми обьектами, наполняя свойство init.class создавая там функцию фабрику класса.

потом функция Class просто возвращает полученное там init.class значение))
правда init.class придется очищать перед каждый созданием класса потому что в нем будет хранится ссылка на предыдущий созданный класс, но это мелочи)) это как кастрюлю после варки помыть.


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