【问题标题】:How to create new instance of parent class in javascript如何在javascript中创建父类的新实例
【发布时间】:2014-02-22 03:51:39
【问题描述】:

我有一个继承自另一个的类。在基类中,我想知道是否可以创建并返回调用父类的新实例。

这是一个例子:

基地:

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 长什么样子?如果需要,可以在此处保存对父构造函数的引用。
  • 我认为 util.inherits 来自 Node.js。
  • 我担心你混淆了术语?通常Child 类确实继承自Parent 类,或者Specific 类确实继承自Base 类。我从未听说过 Parent 继承自任何东西(除非您在讨论的层次结构中有 3 个类,否则可能会有 GrandParent)。

标签: javascript


【解决方案1】:

假设FooThing.prototype.constructor == FooThing,你可以使用

ThingBase.prototype.mapper = function(data) {
  return new this.constructor(crunch(data));
};

所有其他解决方案都会“用样板 [代码] 混淆 [您的] 类”,是的,但是它们不依赖于 correctly set constructor property

【讨论】:

  • 这正是我所需要的。我不知道构造函数原型。感谢那。就我而言,我确实通过 util.inherits 正确设置了构造函数属性,所以这非常有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
相关资源
最近更新 更多