如何在JavaScript中创建父类的新实例

3
我有一个继承自另一个类的类。在基类中,我想知道是否可以创建并返回调用父类的新实例。
以下是一个示例:
Base:
var util = require('util');

var ThingBase = function(options) {
}

ThingBase.prototype.mapper = function(data) {
  // do a bunch of stuff with data and then
  // return new instance of parent class
};

"父母:"
var FooThing = function(options) {
  ThingBase.call(this, options);
};

util.inherits(FooThing, ThingBase);

FooThing.someMethod = function() {
  var data = 'some data';
  var newFooThing = this.mapper(data); // should return new FooThing instance
};

我不想只是从someMethod创建一个新实例的原因是,我希望mapper在返回实例之前对数据进行一些操作。它需要执行的操作对于所有继承自Base的类都相同。我不想用样板代码来创建自身的新实例,以免使我的类变得杂乱无章。
这种情况可能吗?我该如何实现这样的功能?

util.inherits 是什么样子的?如果需要,您可以在那里保存对父构造函数的引用。 - elclanrs
我认为util.inherits来自Node.js。 - Whymarrh
2
我担心你混淆了术语?通常,“子类”会继承“父类”,或者“具体类”会继承“基类”。我从未听说过“父类”继承任何东西(除非在所讨论的层次结构中有3个类,那么可能会有一个“祖先类”)。 - Bergi
1个回答

3
假设 FooThing.prototype.constructor == FooThing,你可以使用:
ThingBase.prototype.mapper = function(data) {
  return new this.constructor(crunch(data));
};

所有其他解决方案都会“用样板代码混乱你的类”,是的,但它们不依赖于正确设置的构造函数属性。

这正是我所需要的。我不知道构造函数原型。谢谢你。在我的情况下,我通过util.inherits正确设置了构造函数属性,所以这个方法完美地运行。 - doremi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接