Constructor (Class-Syntax)
ES6+ tiene una palabra reservada llamada class, pero es importante no confundirlo de cómo lo maneja la programación orientada a objetos (OOP), es decir, que crea una cadena de prototipos que provee una herencia, y que es opuesto a la herencia clásica (OOP).
Class crea una función que posteriormente se llamará con new, es muy similar a la función de constructor (Constructor function) que vimos en la sección anterior.
Ejemplo:
class Employee {
constructor(name) {
this.name = name;
}
salary() {
console.log(`Su salario es de $.12,000.00`);
}
}
class Salesperson extends Employee {
constructor(name) {
super(name);
}
sell() {
console.log(`Es vendido por ${this.name}`);
}
}
const smith = new Salesperson('Smith Peterson');
smith.sell(); // Es vendido por Smith Peterson
smith.salary(); // Su salario es de $.12,000.00
console.log(Object.getPrototypeOf(smith) === Salesperson.prototype); // true
console.log(Object.getPrototypeOf(Salesperson.prototype) === Employee.prototype); // trueDescripción de la cadena de prototipos:
El prototipo de
smithessalesperson.prototype.El prototipo de
salespersonesemployee.prototype.El prototipo de
employeeesObject.prototype.
Comparación:
class Employee {
constructor(name) {
this.name = name;
}
salary() {
console.log(`Su salario es de $.12,000.00`);
}
}
class Salesperson extends Employee {
constructor(name) {
super(name);
}
sell() {
console.log(`Es vendido por ${this.name}`);
}
}
const smith = new Salesperson('Smith Peterson');
smith.sell(); // Es vendido por Smith Peterson
smith.salary(); // Su salario es de $.12,000.00
console.log(Object.getPrototypeOf(smith) === Salesperson.prototype); // true
console.log(Object.getPrototypeOf(Salesperson.prototype) === Employee.prototype); // truefunction Employee(name) {
this.name = name;
}
Employee.prototype.salary = function () {
console.log(`Su salario es de $.12,000.00`);
};
function Salesperson(name) {
Employee.call(this, name);
}
function inherit(proto) {
function ChainLink() {}
ChainLink.prototype = proto;
return new ChainLink();
}
Salesperson.prototype = inherit(Employee.prototype);
Salesperson.prototype.sell = function () {
console.log(`Es vendido por ${this.name}`);
};
const smith = new Salesperson('Smith Peterson');
smith.sell(); // Es vendido por Smith Peterson
smith.salary(); // Su salario es de $.12,000.00
console.log(Object.getPrototypeOf(smith) === Salesperson.prototype); // true
console.log(Object.getPrototypeOf(Salesperson.prototype) === Employee.prototype); // trueconst employee = {
salary: function () {
console.log(`Su salario es de $.12,000.00`);
}
};
const salesperson = Object.create(employee, {
sell: {
value: function () {
console.log(`Es vendido por ${this.name}`);
}
}
});
const smith = Object.create(salesperson, {
name: {
value: 'Smith Peterson'
}
});
smith.sell(); // Es vendido por Smith Peterson
smith.salary(); // Su salario es de $.12,000.00
console.log(Object.getPrototypeOf(smith) === salesperson); // true
console.log(Object.getPrototypeOf(salesperson) === employee); // trueEl equivalente de super(name); es Employee.call(this, name); es una forma genérica de llamar al constructor padre.
Last updated
Was this helpful?