Я создаю приложение, которое позволяет пользователю создавать виджеты. Существует несколько различных типов виджетов, и я определил их с помощью наследования прототипов. т.е.
//the base widget that all widgets inherit from
var Widget = function(){}
Widget.prototype.someFunction = function(){}
//widget type A
var A = function(){}
A.prototype = new Widget();
//widget type B
var B = function(){}
B.prototype = new Widget();
Я обнаружил, что будет удобно добавить метод в базовый класс, который может создать новый экземпляр виджета того же типа. т.е.
//the base widget
var Widget = function(){};
Widget.prototype.clone = function(){
switch(this.type){
case 'A':
return new A();
break;
case 'B':
return new B();
break;
default:
break;
}
};
Что позволило бы мне получить новый виджет того же типа, используя следующий код:
var widgetTypeA = new A();
var cloneOfWidgetTypeA = widgetTypeA.clone();
Меня беспокоит то, что базовый виджет теперь должен явно знать каждый из типов виджетов, которые наследуются от него. Это нарушает какие-либо принципы хорошего ООП?