yo tengo una clase asi
class classname { getuser(){} deleteuser(){} }hay una lista de usuarios, definidos fuera de la clase como este
let user =[ {id:1,name:"username}, {id:2,name:"username}, ]Ya tengo un código con funciones que funcionan muy bien. Pero tengo un problema para acceder a la lista de usuarios dentro de la clase. ¿Necesito crear un contratista?
¿Necesito crear un contratista?
Sí, por supuesto que debe hacerlo. Cuando se trata de OOP , cada class tiene un constructor , incluso si no lo crea, ¡lo tiene por defecto!
Tengo un problema para acceder a la lista de usuarios dentro de la clase.
Intente declararlo antes y cree sus User objects , luego agréguelos a la lista de users , juegue con ellos obteniendo y eliminando .
class User { constructor(id, name, isVerified) { this.id = id; this.name = name; this.isVerified = isVerified; } static getUser(id) { return new Promise((resolve, reject) => { setTimeout(() => { let user = users.find((user) => { return user.id == id; }); if (user) resolve(user); else reject("User not found!"); }, 2000); }); } static deleteUser(id) { return new Promise((resolve, reject) => { setTimeout(() => { let user = users.find((user) => { return user.id == id; }); if (user) { users = users.filter((user) => user.id !== id); resolve("User deleted successfully!"); } else reject("user not found"); }, 2000); }); } } let users = []; const u1 = new User(1, "Armin", true); const u2 = new User(2, "Vahid", true); const u3 = new User(3, "Steve", false); users.push(u1, u2, u3); console.log(await User.getUser(1)); //{ id: 1, name: "Armin", isVerified: true } console.log(await User.deleteUser(3)); //User deleted successfully! console.log(users); //[{id: 1, name: 'Armin', isVerified: true}, {id: 2, name: 'Vahid', isVerified: true}] console.log(await User.getUser(3)); //User not found!No recomiendo usar valores fuera de la clase a. La razón de esto es que la clase no tiene forma de saber si se modifican o manipulan valores fuera de la instancia. Mantener los valores como parte de la clase permitirá que cada instancia posea su propio conjunto de datos. Por ejemplo, puede ayudar a varios conjuntos de usuarios que no están relacionados de ninguna manera, pero que aún deben manipularse con los mismos métodos.
Si necesita que la clase maneje a los usuarios, puede pasar los usuarios a la clase con un constructor o mediante sus propios métodos. Por ejemplo: addUser(id, name) {}
En el siguiente ejemplo, he elegido este último.
No necesitas un constructor . Solo si tiene una lógica que debe llamarse cada vez que crea una nueva instancia de la clase, como configurar valores y propiedades.
class Users { list = []; add(id, name) { this.list.push({ id, name }); } get(id) { return this.list.find(user => user.id === id); } delete(id) { this.list = this.list.filter(user => user.id !== id); } } // Create users instance. const users = new Users(); // Add two users. users.add(0, 'Foo'); users.add(1, 'Bar'); console.log('All users', users.list); // Get a single user const userBar = users.get(1); console.log('User Bar', userBar); // Delete a single user. users.delete(0); console.log('All users after deletion', users.list);