原型模式创build新的属性

我试图分享socket.io到我的财产,不知道为什么它不工作…

我的第一个文件MessageController.js

 function MessageController() { }; MessageController.prototype.io = ""; MessageController.prototype.sendMessageAction = function (req, res) { console.log(this.io); } module.exports = new MessageController(); 

在另一个文件router.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

 module.exports = function (expressApp, io) { var router = system.express.Router(); router = require('./dashboard/router.js')(expressApp, router, io); return router; }; 

而当我打电话route this.io属性返回undefined任何人都知道什么是问题?

这里的问题是对JavaScript范围如何工作的一个误解。 当router调用messageController.sendMessageAction它使用绑定。 例如:

 callback(res, req, next) 

在这种情况下,当前作用域不是 messageController 。 所以this不是指messageController 。 如果你想要绑定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) )