首页 > 解决方案 > 如何在使用“新”构造函数的同时触发函数?

问题描述

所以我有一个类的实例,我想注册所有创建的用户。理想情况下,将它们添加到“用户”类内的变量中,或者如果不可能,添加到全局变量“用户”中。我试图在该类中创建自调用函数,但它不起作用,与变量相同。目标是在使用“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");

标签: javascriptecmascript-6es6-class

解决方案


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

    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");

推荐阅读