Estoy acostumbrado a que los constructores de objetos JavaScript se vean así
function person(first, last) {
this.firstName = first;
this.lastName = last;
}
var dude = new person("the", "dude");
Pero a veces veo que el constructor devuelve "esto", así
function person(first, last) {
this.firstName = first;
this.lastName = last;
return this;
}
¿Qué pasa con devolver this
al final?
3 respuestas
No tiene sentido devolver this
de un constructor, pero puede devolver cualquier objeto que desee. Si no se devuelve ningún objeto explícitamente, this
se devuelve implícitamente.
Un posible caso de uso es:
function person(first, last) {
if(!(this instanceof person)) {
return new person(first, last);
}
this.first = first;
this.last = last;
}
var person1 = new person('first', 'person');
var person2 = person('second', 'person'); // <- without "new"
console.log(person1, person2);
Se devuelve this
para que la persona que llama pueda encadenar llamadas juntas.
console.log(new person('First', 'Last').firstName);
El único caso que sé que podría significar algo es si instancia sus objetos de la siguiente manera;
person.call(Object.create(person.prototype), 'Jack', 'Brown');
El ejemplo anterior requiere que devuelva this
;
Lo que se puede hacer, pero se debe evitar, es devolver un objeto diferente a this
function person(first, last) {
return {first: first, last: last};
}
(new Person() ) instanceof Person // false
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.