Javascript 如何在使用“函数”的同时启动函数;新";建造师?

Javascript 如何在使用“函数”的同时启动函数;新";建造师?,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,所以我有一个类的实例,我想注册所有创建的用户。 理想情况下,将它们添加到“User”类内部的变量中,或者如果不可能,添加到全局变量“users”中。我试图在该类中创建自调用函数,但它不起作用,变量也是如此。目标是在使用“new”操作符创建新用户时注册用户 我该怎么做呢 var users; class User { constructor(email, name) { this.email = email;

所以我有一个类的实例,我想注册所有创建的用户。 理想情况下,将它们添加到“User”类内部的变量中,或者如果不可能,添加到全局变量“users”中。我试图在该类中创建自调用函数,但它不起作用,变量也是如此。目标是在使用“new”操作符创建新用户时注册用户

我该怎么做呢

    var users;

        class User {
            constructor(email, name) {
                this.email = email;
                this.name = name;  
            }
        }

    var user1 = new User("john@sds.com", "John");
    var user2 = new User("san@wp.com", "San");

根据您的需求,您可以使用weakmap,并在每次构造函数调用中添加新用户。这将允许您存储对创建的每个新用户的弱引用,以防止在删除任何用户时内存泄漏

    var users = new WeakMap();

    class User {
        constructor(email, name) {
            this.email = email;
            this.name = name;  
            users.set(this, email)
        }
    }

var user1 = new User("john@sds.com", "John");
var user2 = new User("san@wp.com", "San");
如果需要枚举它们,则需要使用数组,但删除用户时应手动将其从数组中删除

    var users = [];

    class User {
        constructor(email, name) {
            this.email = email;
            this.name = name;  
            users.push(this)
        }
    }

var user1 = new User("john@sds.com", "John");
var user2 = new User("san@wp.com", "San");

根据您的需求,您可以使用weakmap,并在每次构造函数调用中添加新用户。这将允许您存储对创建的每个新用户的弱引用,以防止在删除任何用户时内存泄漏

    var users = new WeakMap();

    class User {
        constructor(email, name) {
            this.email = email;
            this.name = name;  
            users.set(this, email)
        }
    }

var user1 = new User("john@sds.com", "John");
var user2 = new User("san@wp.com", "San");
如果需要枚举它们,则需要使用数组,但删除用户时应手动将其从数组中删除

    var users = [];

    class User {
        constructor(email, name) {
            this.email = email;
            this.name = name;  
            users.push(this)
        }
    }

var user1 = new User("john@sds.com", "John");
var user2 = new User("san@wp.com", "San");

没有线索,如果这是接近你想要的,但给它一个尝试

var用户=[];
var newUser=(函数(){
类用户{
构造函数(电子邮件、名称){
this.email=电子邮件;
this.name=名称;
}
}
返回功能(电子邮件、姓名){
var user=新用户(电子邮件、姓名);
push(用户);
返回用户;
}
})();
var user1=newUser(“john@sds.com“,”约翰“);
var user2=newUser(“san@wp.com“,“San”);
console.log(用户[0],用户1);

console.log(用户[1],用户2)不知道这是否接近您想要的,但请尝试一下

var用户=[];
var newUser=(函数(){
类用户{
构造函数(电子邮件、名称){
this.email=电子邮件;
this.name=名称;
}
}
返回功能(电子邮件、姓名){
var user=新用户(电子邮件、姓名);
push(用户);
返回用户;
}
})();
var user1=newUser(“john@sds.com“,”约翰“);
var user2=newUser(“san@wp.com“,“San”);
console.log(用户[0],用户1);

console.log(用户[1],用户2)在@colxi给出的回答中,我看到的一个问题是User类与users数组变量紧密耦合。如果将来您需要维护两个或更多单独的列表,如adminUsers、moderatorUsers,该怎么办

我将使用一个函数来处理用户的创建,并将用户推送到用户列表中

这段代码非常类似于已经提出的,但我已经实现了这个原则

这样,您的用户类就不必担心用户列表或它之外的任何东西。我们现在有一个单独的函数,负责在每次创建新用户时更新用户列表。您的用户类可以移动到一个单独的js文件中,该文件可以导入到需要创建(任何类型)用户的任何其他js文件中


在@colxi给出的答案中,我看到的一个问题是User类与users数组变量紧密耦合。如果将来您需要维护两个或更多单独的列表,如adminUsers、moderatorUsers,该怎么办

我将使用一个函数来处理用户的创建,并将用户推送到用户列表中

这段代码非常类似于已经提出的,但我已经实现了这个原则

这样,您的用户类就不必担心用户列表或它之外的任何东西。我们现在有一个单独的函数,负责在每次创建新用户时更新用户列表。您的用户类可以移动到一个单独的js文件中,该文件可以导入到需要创建(任何类型)用户的任何其他js文件中


你不能
将每个
新用户
推送到一个数组中,并将其用作全局数组。你可以创建一个工厂来创建你的用户实例,并系统地将它们添加到数组中。你应该显示你尝试过的尝试,因为这样就可以告诉你为什么这样做不起作用。@t.niese我基本上是在尝试将它们放入数组中调用函数并将其添加到全局变量,但得到错误。基本上我不知道是否可以添加自调用函数,因为这是问题的开始。这就是你在问题中已经写过的?我的意思是显示一些您尝试过的代码和您收到的错误消息。这样你不仅可以得到像现在这样的解决方案,但您也将了解您的尝试失败的原因和原因。您是否可以将每个
新用户
推送到一个数组中,并将其用作全局数组。您可以创建一个工厂,创建您的用户实例并系统地将其添加到数组中您应该显示您的尝试,因为这样就可以告诉您为什么了这不起作用。@t.niese我基本上是在尝试将自调用函数添加到全局变量中,但出现了错误。基本上我不知道是否可以添加自调用函数,因为这是问题的开始。这就是你在问题中已经写过的?我的意思是显示一些您尝试过的代码和您收到的错误消息。这样你不仅可以得到像现在这样的解决方案,还可以了解为什么你的尝试没有成功,为什么。哦,我不知道答案会这么简单。我是说第二部分就是我要找的。谢谢。我不同意将新创建的实例添加到构造函数中的其他内容(本例中是数组)中。这是太紧密的结合。如果忘记创建数组,则容易出现错误、过于复杂的代码或中断。而且一个
WeakMap
太过分了哦,我不知道答案会这么简单。我是说第二部分就是我要找的。谢谢。我不同意将新创建的实例添加到构造函数中的其他内容(本例中是数组)中。这是太紧密的结合。而且容易出现bug,