Sólo por diversión: esto también podría ser una manera de proteger contra el olvido la palabra clave new
:
function User(first,last,id){
User.Instance = User.Instance|| function(firstname,lastname,id){
this.firstname = firstname || 'nofirstname';
this.lastname = lastname || 'nolastname';
this.id = id || 0;
if (!User.Instance.prototype.nameUpper){
User.Instance.prototype.nameUpper = function(){
return this.name.toUpperCase();
};
User.Instance.prototype.resetId = function(){
this.id = 0; return this;
};
User.Instance.prototype.toString = function(){
return [this.id,': ',
this.firstname[0].toUpperCase(),
this.firstname.slice(1),
' ',
this.lastname[0].toUpperCase(),
this.lastname.slice(1)].join('');
};
}
}
return new User.Instance(first,last,id);
}
//usage
var pete = User('pete','johanssen',1),
jean = User('jean','harlowe',2),
mary = new User('mary','wsnovsky',3);
console.log(pete); //=> 1: Pete Johanssen'
console.log(mary); //=> 3: Mary Wsnovsky'
En cuanto a su pregunta: yo consideraría 'Buena Práctica' bastante normativo/crítico. ¿Es una "buena práctica" comer un ojo de vaca todos los días? Si tuviera que responder a eso, diría que no, pero estoy seguro de que no todos en el mundo estarían de acuerdo con eso. Usar el patrón que demostró para eludir una palabra clave new
olvidada no es bueno o malo per se. Depende de los criterios que establezca: ¿desea imponer un estricto rigor o desea salvaguardar su descuido propio o el de sus colegas? ¿El patrón será menos eficiente? ¿La rigurosidad de la respuesta de chukj funcionará en todas las situaciones y, de no ser así, será suficiente para usted?
Una de las cosas que amo y odio en javascript es su flexibilidad. JSLint, por lo que yo entendí de las conferencias de Douglas Crockford, está diseñado para forzar a un estilo de programación uniforme - en sus propias palabras:
usando JSLint se hacer daño
Pero por otro lado, jslint ofrece muchas posibilidades para facilitar esa fuerza usando opciones como 'Tolerar definiciones mal ordenadas', 'Tolerar constructores no capitalizados', etc. En otras palabras, incluso usando jslint, 'buena práctica' no es inequívocamente definido.
A veces la comunidad javascript se comporta como 'la denominación de la iglesia de javascript'. En él encontramos creyentes muy estrictos, para quienes la ley es la ley, y toda aberración a ella es un pecado capital (para quienes puede ser "uso estricto" fue especialmente inventado;). Otros siguen un camino más pragmático.Hay feligreses regulares y personas que nunca se presentan. Cismas emergen. Algunos planean abandonar esta iglesia y encontraron una nueva, p. donde classes
están permitidos y se consideran buenos y sagrados.
Como puede ser claro ahora: creo que no existe la "buena práctica". O para expresarlo en términos más pseudoreligiosos: la buena práctica está en el ojo del espectador.
Creo que solo tienes que molestarte con eso si estás desarrollando una biblioteca pública, donde las personas podrían llamar erróneamente 'User()' en lugar de 'new User()'. –