Как из OOPS базы, я всегда использую наследование как мощный инструмент для повторного использования кода,Почему Javascript не поддерживает наследование по умолчанию?
Например, если я пишу шахматную программу в OOPS и когда я реализую is-a
отношения, как,
Class Piece{
int teamColor;
bool isLive;
Positon pos;
int Points;
.......
int getTeamColor(){....}
.......
};
Class Rook extend Piece{ //`is-a`
...... // No getTeamColor() definition here.. because the parent has the definition.
};
Class Pawn extend Piece{ //`is-a`
......// No getTeamColor() definition here.. because the parent has the definition.
};
I мог бы сделать это с отношением has-a
в javascript, но недостаток, который я вижу, - это Я должен переопределить каждую функцию в производном классе.
Пример: переопределение getTeamColor() снова в каждом ладья, конь, пешки, король .... и т.д ..
var Pawn = function(teamColor,pos){
var piece = new Piece(teamColor,pos);
.......
this.getTeamColor = function(){
return piece.getTeamColor();
};
}
Мой вопрос, Почему Javascript оленья кожа поддерживает классическое наследование в качестве опции по умолчанию ?
Посмотрите на jOOPL (http://joopl.codeplex.com). Это объектно-ориентированная библиотека на 100% JavaScript, которая расширяет язык поддержки ООП класса. Таким образом, он имеет наследование и полиморфизм (и многие другие функции). Я собираюсь выпустить новую версию за несколько дней с большим количеством улучшений. –
JavaScript поддерживает наследование * если вы его используете *. Посмотрите «Цепочка прототипов JavaScript». Что касается «Почему javascript не поддерживает классическое наследование как вариант по умолчанию?» - потому что именно так был определен JavaScript. Почему у Java нет черт, кроме Scala? Почему Python поддерживает MI, хотя Ruby этого не делает? Почему C++ не имеет множественной отправки от Dylan? Почему Эйфель разрешает перерыв LSP? Ну, они * разные языки * и утверждать, что один из них правильный - через косвенные средства «классического» - это отрицать, что другой подход является (или более) действительным. – user2246674
Полная статья от Mozilla Developer Network о деталях объектной модели javascript. [LINK HERE] (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Details_of_the_Object_Model). Эта статья охватывает наследование, иерархию и отношения при сравнении между Java (на основе класса) и Javascript (на основе Prototype). –