我正在创建一个允许用户创建小部件的应用程序。有几种不同类型的小部件,我使用原型继承定义了它们。IE
//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();
我发现在基类上添加一个可以创建相同类型的新小部件实例的方法会很方便。IE
//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();
我担心的是,基本小部件现在必须明确了解从它继承的每种小部件类型。这是否违反了良好 OOP 的任何原则?