2014-01-30 31 views
1

我有一個從另一個繼承的類。在基類中,我想知道是否可以創建並返回調用父類的新實例。如何在javascript中創建父類的新實例

下面是一個例子:

基地:

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創建新實例的原因是,我希望映射器在返回實例之前對數據做一堆東西。它需要做的事情對於從Base繼承的所有類都是一樣的。我不想用模板混亂我的課程來創建自己的新實例。

這可能嗎?我該如何去實現這樣的事情?

+0

'util.inherits'如何看起來像?如果你需要的話,你可以在那裏保存對父構造函數的引用。 – elclanrs

+0

我認爲'util.inherits'來自Node.js. – Whymarrh

+2

我擔心你會混淆術語?通常一個'Child'類繼承自'Parent'類,或'Specific'類繼承自'Base'類。我從來沒有聽說過從任何東西繼承的Parent,(除非在討論的層次結構中有3個類,那麼可能有一個'GrandParent')。 – Bergi

回答

1

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

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

所有其他的解決辦法「弄亂[你]與樣板類[代碼]」,是的,但他們不依靠correctly set constructor property

+0

這正是我所需要的。我不知道構造函數的原型。感謝那。在我的情況下,我通過util.inherits有一個正確設置的構造函數屬性,所以這個效果很好。 – doremi

相關問題