我正在自己的模型层上工作,在节点应用程序中。我们有一个ModelBase类,我们所有的模型都从它继承而来。这很好。我现在想要做的是使模型能够从其他模型继承,以便他们也继承他们的模式和原型方法。如何在javascript中多重继承
我有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。我不知道如何解决这个问题。
任何想法?