Прототипы лучше классов?
Прототипы же лучше классов? Это как классы, только динамические, разве нет?
|
Цитата:
Цитата:
|
Цитата:
Суть и того и другого в том чтобы экономить память, храня общие свойства и методы единожды. |
Цитата:
Пример с прототипами: у меня есть некий класс X, который при инициализации создает HTML элемент для какой-нибудь информации. Я хочу сделать класс Y, который наследуется от X.
X = function(){ // функция? блжад, это же конструктор, причем тут функция?
this.elem = document.createElement('div');
}
Y = function(){}
Y.prototype = new X;
//что бы вы думали? Теперь this.elem является одним и тем же объектом для всех экземпляров Y
|
Цитата:
Мы говорим про теорию если что. |
На этот раз соглашусь с автором темы, по поводу его последнего поста.
FINoM, Вы как раз таки повесить на классическую систему наследования - классами и так же пытаетесь реализовать наследование в JS. Правильное наследование:
var a = function(){},
b = function(){};
b.prototype = Object.create(a.prototype);
И прототипы да, лучше. И их тем более не нужно ни с чем там сопоставлять. |
Цитата:
|
Livaanderiamarum,
тут скорее в теории медленнее язык программирования, из-за динамичности. типа Но это только в теории. |
Nekromancer, то есть прототипы не медленнее классов если абстрагироваться от языка?
|
Livaanderiamarum,
Ну во первых, даже классы быстрее, то их здесь нет. А есть прототипы, этого не изменишь. Как на низком уровне реализуются классы представления не имею, но не думаю что будет большое отличие в скорости между двумя динамически типизированными языками одного уровня, где в одном будет прототипное наследование, а в другом привычно классовое. |
Цитата:
|
Livaanderiamarum,
Ах, вы про это. Ну тогда вообще не понимаю о какой медленной работе может идти речь. Добавления свойства в прототип, на прямую не влияет на объекты созданные из этого прототипа. |
Цитата:
|
Livaanderiamarum,
Из-за этой псевдо проблемы они точно не медленее. Хуже - это лишь субъективное мнение любителей классов. Я например могу точно так же не любить классы и говорить, что они хуже, отыскивая массу причин. Вообще, прототипы это другое, примите это, сколько можно сравнивать. От этого вам не придёт понимание прототипного программирования, а на это как раз лучше было бы потратить своё время. |
Nekromancer, а я так бы сказал:
Если бы программы появлялись без программирования, я был бы рад этому. Мы идем к тому что скоро так и будет. А нравится какой то прием программирования или не нравится, это удел скорее рабов не способных мыслить широко и видеть причины следствий. |
Цитата:
|
Цитата:
|
Цитата:
|
FINoM,
Это наследование прототипа. В прототипе не только методы, но и обычные свойства. |
Цитата:
|
Цитата:
|
FINoM,
Причём тут конструктор? Хочешь наследование конструкторов, делай их отдельно, запуская старый конструктор в новом, как это делают в NodeJS. Либо пиши функцию аля createClass/defineClass. Наследование прототипа никак не относится к конструктору. |
Цитата:
Цитата:
|
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
});
|
Nekromancer, вариант, да. Но всё равно костыль.
|
Цитата:
2) в чем преимущество классов по сравнению с прототипами что нужно использовать костыли? |
Цитата:
Цитата:
|
Цитата:
2) в чем преимущества классов над прототипами? |
Цитата:
Цитата:
|
FINoM, зачем сопоставлять прототипы с классами если при этом вы испытываете трудности?
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
цитата: Цитата:
Нужно объективно сравнивать недостатки и преимущества.) а не на устояние смотреть. Вот я и прошу сравнить, мыл зачем сопоставлять если вещи разные, к одной привык к другой нет. Это же не определяет лучшесть или хужесть какой-то из них. ))) (сопоставления не в смысле обсуждения на форуме, а сопоставления в том контексте в котором он сказал) |
FINoM,
Ну вы как всегда критичны до невозможности :) |
объясните мне , что такое классы в javascript.
особенно про абстрактные упомяните, ага. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 09:32. |