Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Чем отличаются прототипы от классов (https://javascript.ru/forum/misc/25296-chem-otlichayutsya-prototipy-ot-klassov.html)

Livaanderiamarum 01.02.2012 02:39

Чем отличаются прототипы от классов
 
Я не особо разбираюсь в классах хотя и прочитал что это такое вдоль и поперек. Я читал википедию и читаю теорию ооп.
Я пришел к выводу:
Прототипы - это одна из реализаций классов. Может я тупой, а может тупые те кто говорит что в js классов нет?????

Или я не прав? Поправьте. Прототипы это и есть классы еманаврот!

Livaanderiamarum 01.02.2012 02:42

//это разве не класс?
function Cat(a){
this.size = a
}
//а это разве не экземпляр класса?
var cat = new Cat(4)



Нет, может я тупой? Но это же класс! Хоть убейте, но это класс кошек, который создает экземпляры! Может люди просто НЕ ЗНАЮТ?

melky 01.02.2012 02:50

Утро вечера мудренее. Может не стоит пытаться понять ООП JS в 3 часа ночи ? :)

poorking 01.02.2012 02:52

Цитата:

Сообщение от Livaanderiamarum
Прототипы - это одна из реализаций классов.

Прототипное наследование - как вариант реализации наследования. Классов, формально, как таковых конструкций синтаксических в JS нет, но практически, чем конструкторы не классы для своих объектов? Только тем что нет у них такого функционала как у классов, например как в java.
Ограничение прав доступа к полям, абстрактные поля, абстрактные классы и интерфейсы, и так далее.
А в JS - функции-конструкторы объектов, работа с ними похожа на работу классическими классами o_O.

Цитата:

Сообщение от Livaanderiamarum (Сообщение 154434)
//это разве не класс?
function Cat(a){
this.size = a
}
//а это разве не экземпляр класса?
var cat = new Cat(4)


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

poorking 01.02.2012 02:54

Цитата:

Сообщение от melky
3 часа ночи


Да, пора. Туда. В 7 вставать

Livaanderiamarum 01.02.2012 09:09

Цитата:

Сообщение от poorking
Ограничение прав доступа к полям, абстрактные поля, абстрактные классы и интерфейсы, и так далее.

Ясно, не представляю где это может пригодится. Замыкания же есть чтобы делать приватные переменные, или это костыль типа, а там для этого специальный синтаксис есть?

poorking 01.02.2012 10:45

Livaanderiamarum,
Э то не костыль, а так сказать подражание программированию классами, да можно сделать приватные, статические, приватные статические классы и методы.
function Class() {
	Class.prototype.init.apply(this, arguments)
}

Class.prototype = new function (Class) {
	
	//	private (Вызывается в контексте инстанса)
	function privateMethod () {
	
	}
	
	//	public
	this.init = function () {
		privateMethod.call(this);
	}
	
	//	public static
	Class.staticMethod = function () {
		privateStatic();
	}
	
	//	независим от контекста
	function privateStatic () {
	
	}
	

}(Class);


А в java да, там для этого специальные конструкции

class Class() {
	
	
	public void init () {}
	
	private void privateMethod () {}
	
	public static void staticMethod() {}
	
	private static void privateStatic(){}
}

monolithed 01.02.2012 14:43

Livaanderiamarum, Синтаксические конструкции в разных языках называются по разному. Внимательно прочтите определение класса, нигде не говорится об обязательном присутствии ключевого слова class.

Livaanderiamarum 01.02.2012 17:32

monolithed,
Цитата:

Сообщение от monolithed
Внимательно прочтите определение класса(ссылка на википедию), нигде не говорится об обязательном присутствии ключевого слова class.


Цитата:

Сообщение от Livaanderiamarum
Я читал википедию и читаю теорию ооп.
Я пришел к выводу:
Прототипы - это одна из реализаций классов. Может я тупой, а может тупые те кто говорит что в js классов нет?????
Или я не прав? Поправьте. Прототипы это и есть классы еманаврот!


тред не читай @ сразу отвечай

Gozar 01.02.2012 17:42

Цитата:

Сообщение от Livaanderiamarum (Сообщение 154593)
Зачем нужны приватные методы? Зачем мне пытаться от себя что-то скрыть?

Зачем здесь var?

var a = 10;

function F() {
    var a = 20; // зачем здесь var?
}


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