2016-11-15 8 views
2

...プロトタイプパターンの新しいプロパティを作成

私の第一のファイル、MessageController.jsここで

var messageController = require('./controllers/MessageController'); 


module.exports = function (expressApp, router, io) { 
    console.log(io); 

    messageController.io = io; 

    router.post('/dashboard/message', messageController.sendMessageAction); 

    return router; 
}; 

私はrouter.jsを必要とする方法である:

このような10
module.exports = function (expressApp, io) { 
    var router = system.express.Router(); 

    router = require('./dashboard/router.js')(expressApp, router, io); 

    return router; 


}; 

そして、私がルートthis.ioを呼び出すと、プロパティーはundefinedを返します誰もが何か問題を知っていますか?

+0

あなたはrouter.js の試みを未定義 に設定するかもしれないように見えます: module.exportsは=機能(expressApp、ルータ、IO){ はconsole.log(IO); // undefined .... }; –

+0

私はbacauseを定義していないので、私は 'io'を文字列で置き換えましたが、同じ結果を返しました... – Vladimir

+0

router.jsに設定する前に置き換えました 私は示唆したように、 –

答えて

1

ここでの問題は、JavaScriptでスコープがどのように機能するかについての誤解です。 routermessageController.sendMessageActionを呼び出すと、それにバインディングが使用されます。例えばこの場合

callback(res, req, next) 

、現在のスコープmessageControllerありません。したがってthismessageControllerを参照していません。 thisとする場合は、からmessageControllerまでをバインドする必要があります。sendMessageActionにする必要があります。

// Using Function#bind 
router.post(
    '/dashboard/message', 
    messageController.sendMessageAction.bind(messageController) 
) 

// Using a closure 
router.post(
    '/dashboard/message', 
    (req, res) => messageController.sendMessageAction(req, res) 
) 
+0

ここに「ここ」は誰ですか? ルータ?メソッドが彼に削除されたので、 ? –

関連する問題