Estoy creando una instancia de un objeto en javascript usando un constructor. Al igual que:

var Constructor = function(){
    this.property1 = "1";    
}
var child = new Constructor();
console.log(child) // Constructor {property1: "1"}

Me gustaría que se invocara un método una vez cada vez que se crea una instancia de un objeto child mediante la palabra clave new. Me gustaría que este método solo esté disponible para Constructor.

Esto es lo que se me ocurrió hasta ahora:

var Constructor = function(property2){
    this.property1 = "1";
    (function(){ this.property2 = property2}).call(this);
}
var child = new Constructor("2")
console.log(child) // Constructor {property1: "1", property2: "2"}

¿Es esta la forma correcta de abordar este problema en Javascript? ¿Existe una forma más limpia o más sólida de abordar este problema?

0
Gerard Simpson 30 dic. 2016 a las 04:16
3
Supongo que la función real a la que desea llamar está definida en otro lugar. Porque tal como está, sería mucho más limpio simplemente en línea this.property2 = "2";. ¿Está preguntando si f.call(this) es la forma correcta de llamar a una función y configurar this a un valor específico? Si es así, entonces sí.
 – 
Felix Kling
30 dic. 2016 a las 04:20
Solo estoy usando esa función como ejemplo, reemplazaría ese código con otra funcionalidad que mutaría el objeto en función de los parámetros que ingresan a la función Constructor. Editaré la pregunta para reflejar esto
 – 
Gerard Simpson
30 dic. 2016 a las 04:26

1 respuesta

La mejor respuesta

Lo que estás haciendo parece un poco inútil porque podrías usar directamente

var Constructor = function(property2) {
  this.property1 = "1";
  this.property2 = property2;
};

Pero si su constructor hace cosas complejas y lo que quiere es dividirlas en partes para una mejor abstracción, entonces personalmente sacaría estas partes para tener un constructor más limpio:

var Constructor = (function() {
  function someLogic(instance, value) {
    instance.property2 = value;
  }
  return function Constructor(property2) {
    this.property1 = "1";
    someLogic(this, property2);
  };
})();
1
Oriol 30 dic. 2016 a las 04:35
He editado mi pregunta para reflejar que mi constructor estaría haciendo cosas más complejas. Gracias
 – 
Gerard Simpson
30 dic. 2016 a las 04:30
No, no ha dejado claro en ninguna edición que la función sería más compleja
 – 
Jaromanda X
30 dic. 2016 a las 04:33
La única edición que hizo fue agregar un parámetro al constructor. ¿Qué tiene eso que ver con la función compleja que desea llamar?
 – 
Barmar
30 dic. 2016 a las 05:07
Si puede abstraer la idea de que la función está haciendo más que establecer una variable simple, podrá llegar al meollo del problema. Gracias
 – 
Gerard Simpson
30 dic. 2016 a las 07:56