Nodejs支持不同类中的同名函数吗?

时间:2015-08-04 16:53:03

标签: javascript node.js

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

2 个答案:

答案 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)

由于函数名相同且代码按顺序执行,因此第二个类中的函数会覆盖第一个函数。

因此,将从第二位的文件中调用该函数。