gpt4 book ai didi

javascript - Nodejs 是否支持不同类中的同名函数?

转载 作者:行者123 更新时间:2023-11-30 10:00:48 26 4
gpt4 key购买 nike

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 时,无论如何都会调用 user 类。如果我更改 require 命令,管理类的 foo 会被调用。

最佳答案

正如您在问题中所写的那样,我看不出会发生这种情况的原因。但是,您正在泄漏到全局范围内,这就是您可能最终得到重复项的方式。

users.getInstance = getInstance = function(){ ...

首先,请注意中间的 getInstance 不在 var 范围内,因此它被分配到全局范围。虽然这不会立即导致问题,但您仍在污染全局范围,这很糟糕。

如果你这样做,真正的问题就会出现:

module.exports = getInstance();

无论您是否使用 var 限定了 getInstance 的范围,您都是在全局上下文中调用它,这意味着在函数内部,this = = 全局。这意味着函数第一次运行时,它基本上是在做:

global.instance = new users();

...当您的第二个文件运行时,它发现已经有一个 global.instance 并返回它。

考虑使用 'use strict'; 以便为您捕获这些类型的错误。


最后 -- 你为什么要做所有这些 getInstance 体操?它们完全没有必要。您的用户文件应如下所示:

exports.foo = function(bar) {
...
};

关于javascript - Nodejs 是否支持不同类中的同名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31815028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com