我有以下对象模型我想要工作 - 一直在克隆克隆位!这可能吗?我似乎无法从基类中访问SubClass构造函数而无需对其进行硬编码。
代码用于任意操作的队列,它们共享许多常用功能;新操作被创建为子类,仅覆盖操作特定功能的action()方法。
如果不覆盖每个子类中的clone()方法,这是否可行?
/*
Application specific subclass:
*/
function SubClass_Operation1()
{
BaseOperationClass.apply(this, arguments); // Call inherited constructor
this.action = function()
{
this.manager.addToQueue(this.clone({changeValue:1}));
this.manager.addToQueue(this.clone({changeValue:2}));
this.manager.addToQueue(this.clone({changeValue:3}));
}
}
SubClass.prototype = new BaseOperationClass;
// More of these defined for each operation
...
/*
Base class containing all common functionality
*/
function BaseOperationClass(manager)
{
this.manager = manager;
// Placeholder for virtual action() function
this.action = function()
{
}
this.clone = function(mods)
{
var res = ?????? // Should create exact copy of current SubClass
res.applyModifications(mods);
}
this.applyModifications(mods)
{
...
}
// Lots of common functionality
...
}
答案 0 :(得分:0)
要在r1 r3 r3
r2 r1 r3
r1 r1 r1
方法中访问构造函数而不必对其进行硬编码,通常的解决方案是使用每个对象可以在其自己的原型上设置的.clone()
属性。然后,叶对象定义将在构造函数属性上具有覆盖,并且将是要调用的所需构造函数。正如您已经知道的那样,使用此方法克隆对象需要了解必须发送到构造函数的参数。
此示例此处不使用构造函数的参数。然后它要求每个对象支持一个.constructor
方法,该方法接受从中克隆的对象,因此每个类负责从原始对象初始化新克隆。
以下是正在运行的代码段中的示例:
.init