0

我有一个简单的模块,它是代码

    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

4

1 回答 1

3

您正在尝试实例化您的类(以便它获得 athis和它的prototype)。
为此,您需要new关键字。

但是,您不能将其直接与 require 结合使用;否则,它将被解析为

(new require('./../routing').router()

require()(作为构造函数调用)

相反,您需要将整个函数表达式包装在括号中:

new (require('./../routing').router)()

或者,更好的是,

var Router = require('./../routing').router;
var router = new Router();
于 2013-08-14T20:43:34.367 回答