原型模式创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) )