Javascript:允许基类中的“虚拟”函数创建子类的实例

时间:2010-10-23 11:23:16

标签: javascript oop constructor clone

我有以下对象模型我想要工作 - 一直在克隆克隆位!这可能吗?我似乎无法从基类中访问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 
  ...
}

1 个答案:

答案 0 :(得分:0)

要在r1 r3 r3 r2 r1 r3 r1 r1 r1 方法中访问构造函数而不必对其进行硬编码,通常的解决方案是使用每个对象可以在其自己的原型上设置的.clone()属性。然后,叶对象定义将在构造函数属性上具有覆盖,并且将是要调用的所需构造函数。正如您已经知道的那样,使用此方法克隆对象需要了解必须发送到构造函数的参数。

此示例此处不使用构造函数的参数。然后它要求每个对象支持一个.constructor方法,该方法接受从中克隆的对象,因此每个类负责从原始对象初始化新克隆。

以下是正在运行的代码段中的示例:

.init