在Nodejs中支持不同类的同名函数吗?
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被调用时,无论如何都会调用用户类。 如果我更改了要求命令,则调用pipe理类的foo 。
就像在你的问题中的字面意思,我不明白为什么会发生这种情况。 但是,你正在渗透到全球的范围,这就是你可能最终与重复。
users.getInstance = getInstance = function(){ ...
首先,请注意中间的getInstance
没有用var
作用域,所以它被分配到全局作用域。 虽然这不会造成直接的问题,但您仍然在污染全球范围,这是不好的。
真正的问题出现,如果你只是做:
module.exports = getInstance();
无论你是否已经用var
范围getInstance
,你在全局上下文中调用它,这意味着在这个函数内部, this == global
。 这意味着函数第一次运行,基本上是这样做的:
global.instance = new users();
…当你的第二个文件运行时,它看到已经有一个global.instance
,只是返回它。
考虑使用'use strict';
所以这些types的错误被抓住了。
最后 – 你为什么要做所有这些getInstance
体操? 他们完全没有必要。 你的用户文件应该是这样的:
exports.foo = function(bar) { ... };
由于函数名称相同,代码按顺序执行,所以第二个类中的函数将覆盖第一个类。
所以这个函数将被从任何一个文件放在第二位。