我正在自己的模型層上工作,在節點應用程序中。我們有一個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。我不知道如何解決這個問題。
任何想法?