nodejs可以在具有相同名称的不同类中具有两个函数吗? 如果不是那么为什么不呢?否则代码中有问题。
以下是示例;
var admins = require('./routes/admins');
var users = require('./routes/users');
两个单身人士课程
var users = function users(){
this.foo = foo = function(bar){ ...
}
}
users.getInstance = getInstance = function(){
if(this.instance == null){
this.instance = new users();
}
return this.instance;
}
module.exports = users.getInstance();
admin 类也类似,两个类都具有相同的函数名。
现在,当 foo 被调用时,无论如何都会调用用户类。 如果我更改 require 顺序,则会调用admin类的 foo 。
答案 0 :(得分:3)
正如你在问题中写的那样,我没有看到为什么会发生这种情况的原因。但是,您正在渗透到全球范围内,这就是您最终可能会出现重复的问题。
users.getInstance = getInstance = function(){ ...
首先,请注意中间getInstance
的范围不是var
,因此它被分配到全局范围。虽然这不会立即引起问题,但你仍然在污染全球范围,这很糟糕。
如果您这样做,则会出现真正的问题:
module.exports = getInstance();
您是否使用getInstance
定位var
,您在全局上下文中调用它,这意味着在函数内部this == global
。这意味着第一次运行该函数时,基本上就是这样做:
global.instance = new users();
...当你的第二个文件运行时,它会看到已经有global.instance
并且只返回它。
考虑使用'use strict';
,以便抓住这些类型的错误。
最后 - 你为什么要做所有这些getInstance
体操?它们完全没必要。您的用户文件应如下所示:
exports.foo = function(bar) {
...
};
答案 1 :(得分:1)
由于函数名相同且代码按顺序执行,因此第二个类中的函数会覆盖第一个函数。
因此,将从第二位的文件中调用该函数。