2016-04-10 66 views
0

我在Node中練習,無法解決如何從對象繼承。 我想從我的路由器調用指定的控制器。控制器是從基礎控制器繼承的。但是當我嘗試調用基本控制器方法時,我總是不確定。如何正確地繼承和調用父母方法?Node.js中的繼承

我是一個新手,所以可能是我沒有得到基本的權利。

我的代碼:

router.js:

module.exports = function(app) { 

    app.get('/', function(req, res) { 

    var MainController = require('app/controller/mainController'); 

    var controller = new MainController(req, res); 

    // Here I get undefined; 
    console.log(controller.getWidgets); 

    controller.index(); 

    }); 
} 

mainController.js:

var util = require('util'); 
var BaseController = require('./BaseController'); 

util.inherits(MainController, BaseController); 

function MainController(req,res) { 

    this.index = function() { 

    // Here I want to use method from parent (BaseController) 
    // to get page widgets, also get undefined. 
    var widgets = this.getWidgets(); 

    // console log also says there is no such method 
    console.log(this.getWidgets);   

    // then render page 
    res.render(...) 
    } 

} 

module.exports = MainController; 

BaseController.js:

function BaseController() { 

    // example code 
    this.getWidgets = function() { 
    console.log('widgets are sent'); 
    return 123; 
    } 

} 

module.exports = BaseController; 
+1

getWidgets是一個自己的方法,而不是一個繼承的方法... – dandavis

+1

您忘記了對您的父構造函數的超級調用:在您的MainController的第一行放置'BaseController.call(this)'。 – Bergi

回答

3

的的getWidgets應該被定義爲一個原型方法。

function BaseController() { 

} 

BaseController.prototype.getWidgets = function() { 
    console.log('widgets are sent'); 
    return 123; 
} 

module.exports = BaseController; 
+0

我以爲'BaseController.prototype.getWidgets'和'this.getWidgets'是一回事。有什麼不同?我可以在哪裏讀到它? –

1

在一般的JavaScript中,你不是在傳統的OOP環境中。

繼承是「原型的」。

意義「繼承」對象是對象共享相同的原型爲「父」你應該讀這篇文章prototypical inheritence

在一個旁註,我做了具體實例的小要點上的一些原型的行爲,可以感到陌生起初gist