2016-04-10 65 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