Solución:
No puede hacer eso, dado que JavaScript no es un lenguaje fuertemente tipado, no verá una diferencia entre formulario y nombre de usuario. Puede crear múltiples funciones como createUserFromForm(form)
y createUserFromUserInfo(userName, password,...)
o puede intentar usar un constructor singular sin argumentos especificados y luego usar argumentos colección para comprobar la entrada y decidir qué hacer.
Me gusta la respuesta de Ilya Volodins y pensé que agregaría esto como ejemplo:
function foo() {
var evt = window.event || arguments[1] || arguments.callee.caller.arguments[0];
var target = evt.target || evt.srcElement;
var options = {};
if (arguments[0]) options = arguments[0];
var default_args = {
'myNumber' : 42,
'myString' : 'Hello',
'myBoolean' : true
}
for (var index in default_args) {
if (typeof options[index] == "undefined") options[index] = default_args[index];
}
//Do your thing
}
//then you call it like this
foo();
//or
foo({'myString' : 'World'});
//or
foo({'myNumber' : 666, 'myString' : 'World', 'myBoolean' : false});
Probablemente hay formas más agradables de hacer esto, pero este es solo un ejemplo.
No, no puede, JavaScript no admite sobrecargas de ningún tipo.
Lo que puede hacer es pasar un objeto que ya se ha llenado con los valores a su constructor y luego tomar los valores del objeto, pero esto duplica el código.
O puede crear un constructor predeterminado y agregar métodos como initFromUser
o setFromForm
que luego toman los parámetros respectivos y configuran los valores de los objetos, new User().initFormForm(form)
me parece bastante limpio.