Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прототипы лучше классов? (https://javascript.ru/forum/misc/24348-prototipy-luchshe-klassov.html)

Livaanderiamarum 27.12.2011 05:27

Прототипы лучше классов?
 
Прототипы же лучше классов? Это как классы, только динамические, разве нет?

trikadin 27.12.2011 05:31

Цитата:

Сообщение от Livaanderiamarum
Прототипы же лучше классов?

Имхо, да.

Цитата:

Сообщение от Livaanderiamarum
Это как классы, только динамические, разве нет?

Нет.

Livaanderiamarum 27.12.2011 05:32

Цитата:

Сообщение от trikadin (Сообщение 146356)
Имхо, да.
Нет.

ну а в чем разница? (только не надо мне ссылки давать, как я уже говорил я разбираюсь в этой теме)

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

FINoM 27.12.2011 06:57

Цитата:

Сообщение от Livaanderiamarum
Прототипы же лучше классов?

Как по мне, нет, из-за сложного сопоставления с устоявшейся парадигмой классов. Библиотеки для поддержки традиционного ООП считаю костылями.
Пример с прототипами: у меня есть некий класс X, который при инициализации создает HTML элемент для какой-нибудь информации. Я хочу сделать класс Y, который наследуется от X.
X = function(){ // функция? блжад, это же конструктор, причем тут функция?
   this.elem = document.createElement('div');
}
Y = function(){}
Y.prototype = new X;
//что бы вы думали? Теперь this.elem является одним и тем же объектом для всех экземпляров Y

Livaanderiamarum 27.12.2011 13:26

Цитата:

Сообщение от FINoM (Сообщение 146359)
Как по мне, нет, из-за сложного сопоставления с устоявшейся парадигмой классов. Библиотеки для поддержки традиционного ООП считаю костылями.
Пример с прототипами: у меня есть некий класс X, который при инициализации создает HTML элемент для какой-нибудь информации. Я хочу сделать класс Y, который наследуется от X.
X = function(){ // функция? блжад, это же конструктор, причем тут функция?
   this.elem = document.createElement('div');
}
Y = function(){}
Y.prototype = new X;
//что бы вы думали? Теперь this.elem является одним и тем же объектом для всех экземпляров Y

ну с таким подходом вывод такой что ты не умеешь полноценно пользоваться протатипами. да и вообще рассуждаешь на уровне синтаксиса и.т.п.
Мы говорим про теорию если что.

Nekromancer 27.12.2011 13:32

На этот раз соглашусь с автором темы, по поводу его последнего поста.
FINoM,
Вы как раз таки повесить на классическую систему наследования - классами и так же пытаетесь реализовать наследование в JS.
Правильное наследование:
var a = function(){},
b = function(){};
b.prototype = Object.create(a.prototype);

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

Livaanderiamarum 27.12.2011 13:42

Цитата:

Сообщение от Nekromancer (Сообщение 146404)
На этот раз соглашусь с автором темы, по поводу его последнего поста.
FINoM,
Вы как раз таки повесить на классическую систему наследования - классами и так же пытаетесь реализовать наследование в JS.
Правильное наследование:
var a = function(){},
b = function(){};
b.prototype = Object.create(a.prototype);

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

Привет, да, но в теории, из-за динамичности, они медленнее. типа

Nekromancer 27.12.2011 13:44

Livaanderiamarum,
тут скорее в теории медленнее язык программирования, из-за динамичности. типа
Но это только в теории.

Livaanderiamarum 27.12.2011 13:49

Nekromancer, то есть прототипы не медленнее классов если абстрагироваться от языка?

Nekromancer 27.12.2011 14:11

Livaanderiamarum,
Ну во первых, даже классы быстрее, то их здесь нет. А есть прототипы, этого не изменишь.
Как на низком уровне реализуются классы представления не имею, но не думаю что будет большое отличие в скорости между двумя динамически типизированными языками одного уровня, где в одном будет прототипное наследование, а в другом привычно классовое.


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