如何在javascript中进行多重继承

时间:2014-03-06 01:17:54

标签: javascript node.js inheritance

我在节点应用中处理自己的模型层。我们有一个ModelBase类,我们所有的模型都继承自。这非常有效。我现在想做的是使模型能够从其他模型继承,以便它们也继承它们的模式和原型方法。

我有99%的工作,但扩展架构除外。我希望有人可以帮我找到一个优雅的解决方案。我不想将模式传递给模型构造函数。

这是一个显示ModelBase,ModelA和ModelB示例的基本示例。

我希望ModelB的架构扩展ModelA的架构。非常感谢您的帮助。

var util = require('util');

// BASE MODEL
var ModelBase = function(schema) {
  this.schema = schema;
};

ModelBase.prototype.baseMethod = function() {
  return console.log('base method');
};

// MODEL A inherits from MODEL B
var SCHEMA_A = { a: 'foo' };

var ModelA = function() {
  ModelBase.call(this, SCHEMA_A);
};

util.inherits(ModelA, ModelBase);

ModelA.prototype.test = function() {
  return console.log('test');
};

ModelA.prototype.foo = function() {
  return console.log('foo');
};

// MODEL B inherits from MODEL A
var SCHEMA_B = { b: 'foo' };

var ModelB = function() {
  ModelA.call(this, SCHEMA_B);
};

util.inherits(ModelB, ModelA);

ModelB.prototype.test = function() {
  return console.log('test B');
};

//
var mdlA = new ModelA();
var mdlB = new ModelB();

console.log( mdlA instanceof ModelBase ); // true
console.log( mdlB instanceof ModelA ); // true

// mdlA.test(); // test
// mdlB.test(); // test
// mdlB.foo(); // foo

console.log( mdlA.schema ); // { a: 'foo' }
console.log( mdlB.schema ); // { a: 'foo' }, should also have { b: 'foo' }

我不确定如何做到这一点,但我已经很好地理解了为什么它的工作原理。 ModelB继承了ModelA的原型,它使用SCHEMA_A调用ModelBase,丢失了SCHEMA_B。我不知道如何解决这个问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以通过复制“Child”上的“Parents”原型成员来混合ins或多继承,但instanceOf将不再为true。然后,您可能需要运行Parent的多个初始值设定项。当ParentA和ParentB具有相同的方法时,您必须决定是否要堆叠它们(对于像getAvailableMethods这样的方法)或覆盖它们(最后“继承”覆盖前一个。

可以找到混合的示例here

相关问题