Como programador de C#, tengo la costumbre de hacer las cosas en privado que pueden y deben ser privadas, y siempre me da una sensación extraña cuando un tipo JS me expone todas sus partes privadas (y esa sensación no es ' excitado '). Supongamos que tengo un tipo que tiene un método draw
, que internamente llama a drawBackground
y drawForeground
, lo que no tiene sentido que lo llamen por su cuenta. ¿Cómo debo implementar esto?Javascript: ¿debería estar ocultando mis implementaciones?
Opción 1
Foo = function(){
this.draw();
};
Foo.prototype.draw = function(){
this.drawBackground();
this.drawForeground();
};
Foo.prototype.drawBackground = function(){};
Foo.prototype.drawForeground = function(){};
Opción 2
Foo = (function(){
var constructor = function(){
this.draw();
};
var drawBackground = function(){};
var drawForeground = function(){};
constructor.prototype.draw = function(){
drawBackground.call(this);
drawForeground.call(this);
};
return constructor;
})();
La diferencia, por supuesto, es que en el primer ejemplo, los métodos drawBackground
y drawForeground
son parte de la API pública , mientras que están ocultos al exterior en el segundo. ¿Es eso deseable? ¿Cuál debería preferir? ¿Me equivoco al aplicar mis hábitos de C# a Javascript y debería hacer todo extensible y anular en JavaScript? ¿Y cuáles son las implicaciones de rendimiento del .call(this)
?
Probablemente misundertood su pregunta, pero en la Opción 1 el drawBackground/drawForeground son públicos (incluso si desea que sean privados) por lo que para lograr lo que quiere solo funciona la Opción 2. –
Bueno, sí, esa es mi pregunta, ¿debería preferir hacer las cosas de manera privada cuando puedo? – JulianR