我有一个简单的模块,它是代码
var Router = function(pattern) {
this.setRoutePattern(pattern);
};
Router.prototype = {
setRoutePattern: function(){
this._pattern = pattern || "controller/action/id";
}
};
module.exports.router = Router;
然后在我的其他文件中我想使用路由器并具有以下代码:
var router = require('./../routing').router();
但是这行代码失败,没有方法异常
Object #<Object> has no method 'setRoutePattern'
为什么会发生这种情况,如果我使用require
函数加载代码,为什么原型方法在构造函数中不可见?
答案 0 :(得分:3)
您正在尝试实例化您的课程(以便它获得this
及其prototype
)。
为此,您需要new
关键字。
但是,您无法直接将其与require结合使用;否则,它将被解析为
(new require('./../routing').router()
(将require()
称为构造函数)
相反,您需要将整个函数表达式包装在括号中:
new (require('./../routing').router)()
或者,更好的是,
var Router = require('./../routing').router;
var router = new Router();