原型模式创建新属性
Prototype pattern create new property
我正在尝试将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;
};
当我调用路线this.io
财产返回时undefined
有人知道问题是什么?
这里的问题是对 scope 在 JavaScript 中如何工作的误解。当router
调用messageController.sendMessageAction
时,它会使用绑定。例如:
callback(res, req, next)
在这种情况下,当前范围不是 messageController
.所以this
不是指messageController
.如果要将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)
)
相关文章:
- 创建新属性后的 JSON 空属性
- chart.js 2.0为数据集添加了新属性
- 当组件准备就绪时,如何在Polymer中动态注册新属性
- 为for循环中的对象添加新属性
- 复制第一个属性's值,然后使用第一个属性的值创建新属性
- 调用ko.applyBindings后,向Knockout视图模型添加新属性
- 如何向JSON数组添加新属性
- 在对象上迭代并添加新属性
- 在AngularJS中对指令的隔离作用域设置新属性
- 在knocket js中应用绑定后,向视图模型添加新属性
- 护照个人资料未通过新属性
- 如何在 CKEditor 表的单元格属性中添加新属性
- 无法向 Mongoose 查询返回的对象添加新属性
- 有没有办法让 Javascript 在将新属性添加到给定对象时抛出错误
- W3C 设置新属性
- 是否可以向现有 JSON 数据添加新属性
- 使用 contructor 参数将新属性添加到原型
- 如何为 html5 标签创建新属性
- 创建新属性 - JS / 边缘动画
- 和服:修改数据、分解字符串和添加新属性的功能