Tengo dos archivos, employee.js
const Manager = require('./manager.js'); let manager = new Manager(); class Employee { constructor(name, title, salary, boss=null) { this.name = name; this.title = title; this.salary = salary; this.boss = boss; manager.addEmployee(this.Employee); } } module.exports = Employee;Y administrador.js
const Employee = require('./employee.js'); class Manager extends Employee { constructor(name, salary, title, boss=null) { // this.name = name; // this.title = title; // this.salary = salary; // this.boss = boss; super(name, salary, title, boss); this.managedEmployees = []; } addEmployee(Employee) { this.managedEmployees.push(Employee); } } let annie = new Manager('annie', 100000, 'Director'); let alvy = new Employee('alvy', 75000, 'Analyst', annie); console.log(annie); module.exports = Manager; Estoy tratando desesperadamente de encontrar qué sintaxis me permitiría tomar el método addEmployee(Employee) y llamarlo en el constructor de la clase Employee. Quiero que Gerente sea hijo de Empleado y tenga una matriz de todos los empleados bajo el gerente. El método se está insertando en la matriz, pero no puedo entender qué debería hacer para console.log(annie); para terminar con esta entrada
<ref *1> Manager { name: 'Annie', salary: 100000, title: 'Director', manager: null, employees: [ Employee { name: 'Alvy', salary: 75000, title: 'Analyst', manager: [Circular *1] } ] }Configure su clase de empleado de esta manera:
class Employee { constructor(name, title, salary, boss=null) { this.name = name; this.title = title; this.salary = salary; this.boss = boss; if (boss) { boss.addEmployee(this); } } } Está pasando una instancia de Manager, por lo que si no es nulo, puede llamar a un método en eso. Tenga en cuenta que solo desea pasar this como entrada para addEmployee , ya que this.Employee está tratando de acceder a una propiedad o método en esa clase que no existe.
La salida de la consola se verá así:
Manager { name: "annie", title: 100000, salary: "Director", boss: null, managedEmployees: [ Employee { name: "alvy", title: 75000, salary: "Analyst", boss:Manager {...} } ] }También notará que ha intercambiado el orden de los parámetros por título/salario en su constructor Empleado.