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

FINoM 27.12.2011 16:00

Цитата:

Сообщение от Nekromancer
Это наследование прототипа. В прототипе не только методы, но и обычные свойства.

Но конструктор это ведь не прототип?

Nekromancer 27.12.2011 16:01

FINoM,
Причём тут конструктор? Хочешь наследование конструкторов, делай их отдельно, запуская старый конструктор в новом, как это делают в NodeJS. Либо пиши функцию аля createClass/defineClass.

Наследование прототипа никак не относится к конструктору.

FINoM 27.12.2011 16:06

Цитата:

Сообщение от Nekromancer
Наследование прототипа никак не относится к конструктору.

Я тебе говорю о наследовании класса, а не методов и свойств, определенных в прототипе. Или у тебя конструктор всегда пуст?
Цитата:

Сообщение от Nekromancer
запуская старый конструктор в новом

Расскажи, как делать наследование свойств родительского конструктора.

Nekromancer 27.12.2011 16:12

FINoM,
В JavaScript нет классов. Нет, конструктор не всегда пуст. Это не отменяет пред идущего.

Наследие конструкторов:
var a = function(){},
b = function(){
a.apply(this, arguments);
//b construct here
}

Функция наследования в самом общем виде:
function inherits(parent, handler){
var constructor = function(){
parent.apply(this, arguments);
handler.apply(this, arguments);
}

constructor.prototype = Object.create(parent.prototype);
constructor.prototype.__parent__ = parent;
return constructor;
};
var a = function(){
//construct a here
},
b = inherits(a, function(){
//construct b here
});

FINoM 27.12.2011 16:32

Nekromancer, вариант, да. Но всё равно костыль.

Livaanderiamarum 27.12.2011 17:14

Цитата:

Сообщение от FINoM (Сообщение 146467)
Nekromancer, вариант, да. Но всё равно костыль.

1) в чем проявляется костыль?
2) в чем преимущество классов по сравнению с прототипами что нужно использовать костыли?

FINoM 27.12.2011 17:18

Цитата:

Сообщение от Livaanderiamarum
1) в чем проявляется костыль?

В том, что нужно создавать функцию для наследования.
Цитата:

Сообщение от Livaanderiamarum
2) в чем преимущество классов по сравнению с прототипами что нужно использовать костыли?

Первая половина фразы понятна, я выше уже писал.

Livaanderiamarum 27.12.2011 17:32

Цитата:

Сообщение от FINoM
Первая половина фразы понятна, я выше уже писал.

1) зачем сопоставлять прототипы с классами?
2) в чем преимущества классов над прототипами?

FINoM 27.12.2011 18:04

Цитата:

Сообщение от Nekromancer
В JavaScript нет классов. Нет, конструктор не всегда пуст.

Кстати, конструктор чего? Обычно конструктор — это конструктор класса.
Цитата:

Сообщение от Livaanderiamarum
в чем преимущества классов над прототипами?

В том что классы — это классы: простые, понятные, без нужды строить велосипеды. Это устоявшийся элемент ООП, такой же как и процедура в процедурном программировании. Nekromancer предложил решение, о котором я не знал, при том, что программирую на JS уже около двух лет. При наличии классов, не понадобилось бы строить такие костыли.

Livaanderiamarum 27.12.2011 18:06

FINoM, зачем сопоставлять прототипы с классами если при этом вы испытываете трудности?


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