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

クラスをインスタンス化しようとしています (そのため、thisとそのを取得します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 に答える