¿Por qué no puedo configurar getters y setters de esta manera dentro de la función Constructor?
function zConstructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; set fullname(text) { const parts = text.split(' '); this.firstName = parts[0]; this.lastName = parts[1]; } get fullname() { return this.firstName + ' ' + this.lastName; } }Esta forma de obtener y establecer solo funciona en clases y funciones de fábrica. ¿Cuál es la razón?
¡Gracias!
Una forma adecuada de hacer esto es:
function zConstructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } zConstructor.prototype = { set fullname(text) { const parts = text.split(" "); this.firstName = parts[0]; this.lastName = parts[1]; }, get fullname() { return this.firstName + " " + this.lastName; }, };Su código no funciona porque los establecedores y captadores son significativos solo para Objetos.
Puede hacerlo, pero una función constructora es solo una función, y la sintaxis de los bloques de código ordinarios no incluye la creación de funciones setter y getter; no hay forma de dar sentido a lo que se supone que significa su código, en lo que respecta al analizador.
Lo que puede hacer es usar Object.defineProperties() para agregar las propiedades. O, probablemente mejor, es crearlos en el prototipo directamente (nuevamente, con Object.defineProperties() ) o usando una declaración de class :
function zConstructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; Object.defineProperties(this, { fullname: { set: function(text) { const parts = text.split(' '); this.firstName = parts[0]; this.lastName = parts[1]; }, get: function() { return this.firstName + ' ' + this.lastName; } } }); }