引用导出属性的多种方式之间的差异
Difference between multiple ways of referencing exported attribute
我正在使用socket.io,需要导出io对象以便在其他文件中使用。控制器A工作并成功地发出消息。奇怪的是,控制器B和C没有正确引用.io
。引用.io
的三种方式之间有什么区别吗?
// index.js
exports.register = function (server, options, next) {
var onlineUsers = {};
var io = require('socket.io')(server.select('collaboration').listener);
io.on('connection', function (socket) {
socket.on('is_online', Handlers.is_online.bind(null, socket));
socket.on('disconnect', Handlers.is_offline.bind(null, socket));
});
exports.io = io;
next();
};
// controllerA.js
var io = require('./collaboration/index');
function testFunc() {
io.io.emit('testing', {data: 'some data'});
}
// controllerB.js
var io = require('./collaboration/index').io;
function testFunc() {
io.emit('testing', {data: 'some data'});
}
// controllerC.js
var index = require('./collaboration/index');
var io = index.io;
function testFunc() {
io.emit('testing', {data: 'some data'});
}
这与定时有关:只有在调用register()
时才会创建exports.io
。在此之前,exports.io
是未定义的。
这也反映在您的控制器上:
- CCD_ 6存储对CCD_ 8的CCD_。当您需要
index.js
时,exports.io
还不存在,但这不是问题,因为您稍后在testFunc
中引用它(是否意味着必须在testFunc
之前调用register()
,否则io.io
仍然未定义) controllerB
和controllerC
在调用require
时直接引用exports.io
。然而,在那个时候,它还不存在。换句话说,它们正在存储一个未定义的引用,因此它们的testFunc
失败
以下是正在发生的事情的简化:
// controllerA
var obj = {};
var io = obj;
obj.io = 'hello';
console.log(io.io);
// controllerB
var obj = {};
var io = obj.io;
obj.io = 'hello';
console.log(io);
// controllerC
var obj = {};
var index = obj;
var io = index.io;
obj.io = 'hello';
console.log(io);
此日志:
hello
undefined
undefined
相关文章:
- 浏览器之间的文本区域更新方式不同
- 在控制器之间传递变量的最佳方式
- 设置两个反应组件之间状态的正确方式
- CSS Div 类之间的转换仅以一种方式发生
- 负载角度依赖关系之间的区别是什么,共享模块的最佳方式是什么
- 单击时在参数之间切换的最佳方式
- 更新视图和控制器之间的角度重复数据值的最佳方式是什么
- Ember JS中控制器之间共享状态的正确方式
- 在不同控制器之间共享数据的最佳角度方式
- 在$rootScope和控制器之间切换布尔值的最佳方式
- 寻找在模块之间导出和导入变量的最佳方式
- 如何以编程方式计算两种颜色之间的对比度
- 如何以正确的方式在angular应用程序中的控制器之间共享数据
- 都是'sync'event和Backbone.sync以某种方式连接在一起——两者之间有什么区别
- 如何以编程方式在选项卡之间移动
- Reactjs中组件之间交互的最佳方式是什么
- 在Typescript前端和NodeJs后端之间共享js对象的最佳方式
- 什么'这是允许一个节点进程在其自己的模块之间进行通信的最具规模友好的方式
- 引用导出属性的多种方式之间的差异
- 这两种在javascript中编写函数的方式之间的区别