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?

1
User314159 10 dic. 2015 a las 00:59

3 respuestas

La mejor respuesta

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);
2
Amit 9 dic. 2015 a las 22:02

Se devuelve this para que la persona que llama pueda encadenar llamadas juntas.

console.log(new person('First', 'Last').firstName);

0
DaveB 9 dic. 2015 a las 22:24

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
0
Juan Mendes 9 dic. 2015 a las 22:03