感谢您阅读!!
问题
如何避免名称冲突?那是我的问题吗?这是正确的用语吗?
详情
我是节点&的新手javascript并编写一个与不同类型的网络设备进行对话(tcp on 23)的应用程序。
我决定为每台设备创建一个单独的js文件,并在require
文件中app.js
创建它们。
当我启动应用时,apple1
会连接,但只要banana1
连接,我就会失去与apple1
的连接。我没有收到apple1
的断开连接消息。
我怀疑存在某种变量名称冲突,因为当我改变最后连接苹果的顺序时,那么香蕉就是我失去连接的那种。为了支持我的怀疑,在banana.js
我指定self = this;
的位置,我将其更改为somethingElse = this
。通过这样做,我能够同时连接到两个设备。
app.js
var deviceA = require('./apple.js');
var apple1 = new deviceA({
ipAddress: "192.168.1.97",
port: 23
})
apple1.connect();
apple1.on('connect', function(data) {
console.log('Apple: Device Connected @' + apple1.ipAddress);
})
apple1.on('disconnect', function(data) {
console.log('Apple: Device Disconnected');
})
var deviceA = require('./banana.js');
var banana1 = new deviceA({
ipAddress: "192.168.1.97",
port: 23
})
banana1.connect();
banana1.on('connect', function(data) {
console.log('Banana: Device Connected @' + banana1.ipAddress);
})
banana1.on('disconnect', function(data) {
console.log('Banana: Device Disconnected');
})
apple.js
var events = require('events');
var Apple = function(opts) {
this.ipAddress = opts.ipAddress;
this.port = opts.port;
};
Apple.prototype = new events.EventEmitter;
module.exports = Apple;
Apple.prototype.connect = function() {
self = this;
// telnet to apple
var net = require('net');
self.connection = net.createConnection(self.port, self.ipAddress);
self.connection.setEncoding("UTF8");
self.connection.on('connect', function(data) {
self.emit('connect');
});
self.connection.on('disconncect', function(data) {
self.emit('disconnect');
});
}
banana.js
var events = require('events');
var Banana = function(opts) {
this.ipAddress = opts.ipAddress;
this.port = opts.port;
};
Banana.prototype = new events.EventEmitter;
module.exports = Banana;
Banana.prototype.connect = function() {
self = this;
// telnet to banana
var net = require('net');
self.connection = net.createConnection(self.port, self.ipAddress);
self.connection.setEncoding("UTF8");
self.connection.on('connect', function(data) {
self.emit('connect');
});
self.connection.on('disconncect', function(data) {
self.emit('disconnect');
});
}
答案 0 :(得分:2)
如何避免名称冲突?
不要使用(implicit) global变量。
这是我的问题吗?
是。你造成了它,你需要修复它。
这是正确的用语吗?
是!
如何解决?
不要重命名碰撞变量,而是declare it as local using var
。
如何防止这种情况?
对所有文件使用strict mode,并且在分配未声明的全局变量时会遇到异常。