En el siguiente código, ¿cuál es la forma correcta de heredar el prototipo de un constructor de objetos? Quiero que el prototipo de administrador tenga el método de 'inicio de sesión' que se adjuntó previamente al prototipo de usuario. He probado ambos y no estoy exactamente seguro de cuál es la forma correcta.
function User(email, name) { this.email = email; this.name = name; this.online = false; } User.prototype.login = function() { this.online = true; console.log(this.email, 'has logged in'); } function Admin(...args) { User.apply(this, args); this.role = 'super admin'; } Admin.prototype = Object.create(User.prototype); //option 1 Admin.prototype = User.prototype; //option 2La opción 1 es definitivamente el mejor enfoque, porque crea un nuevo objeto que hereda de User.prototype pero que no es lo mismo.
La opción 2 significa que cualquier cambio en Admin.prototype se reflejará exactamente en User.prototype , lo cual no es deseable; con ese enfoque, son exactamente el mismo objeto.
Manifestación:
function User(email, name) { this.email = email; this.name = name; this.online = false; } User.prototype.login = function() { this.online = true; console.log(this.email, 'has logged in'); } function Admin(...args) { User.apply(this, args); this.role = 'super admin'; } Admin.prototype = User.prototype; //option 2 Admin.prototype.getAdminInfo = function() { console.log('getting admin info'); } const user = new User('useremail'); user.getAdminInfo(); Debe usar Admin.prototype = Object.create(User.prototype); en cambio. De esta manera, los métodos en el usuario estarán disponibles en el administrador, pero también podrá crear métodos separados solo para administradores sin cambiar el usuario.