节点:所需文件的名称冲突
谢谢阅读!!
这个问题
我如何避免名称冲突? 这是我的问题吗? 这是正确的吗?
细节
我是新来node&javascript和写一个应用程序(23)的tcp到不同types的networking设备。
我决定为每个设备创build一个单独的js文件,并且在我的app.js
文件中require
它们。
当我启动的应用程序, apple1
连接,但只要banana1
连接,我失去了与apple1
连接。 我没有收到apple1
的断开信息。
我怀疑是因为当我改变连接最后一个苹果的顺序时有某种variables名称冲突,那么香蕉就是我失去连接的那个。 为了支持我的怀疑,在我的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'); }); }
我如何避免名称冲突?
不要使用(隐式)全局variables。
这是我的问题吗?
是。 你造成了,你需要修复它。
这是正确的吗?
是!
如何解决它?
不要重命名碰撞variables,而是使用var
将其声明为local 。
如何防止这一点?
对所有文件使用严格模式 ,并且在分配未声明的全局variables时会发生exception。