Cuando uso AJAX, tiendo a pasar objetos de mi servidor a Javascript en forma de objetos JSON (también conocido como Javascript). Ciertas funciones dentro de mi Javascript dependen del tipo específico de objeto que estoy usando. Por ejemplo, usemos un número de teléfono, por ejemplo. Tengo un constructor:Asignación de objetos JSON a objetos Javascript
function PhoneNumber(number, type, isPrimary, contactId, id, className) {
this.number = number;
this.type = type;
this.isPrimary = isPrimary;
this.contactId = contactId;
this.id = id;
this.className = className;
}
Que uso al crear un objeto de número de teléfono en mi Javascript. En algunas situaciones, no creo el objeto en JS, obtengo el objeto del servidor, por lo que viene en forma de un objeto genérico con exactamente los mismos campos. Así que cuando mi código se basa en el tipo específico mediante el uso de algo como esto:
var objType = objArray[i].constructor.name;
var mappedObj;
switch(objType) {
case 'PhoneNumber':
currentArray = currentArray.phone;
//Convert response to javascript object.
mappedObj = mapPhone(jsonResponse[i]);
break;
case 'Email':
currentArray = currentArray.email;
mappedObj = mapEmail(jsonResponse[i]);
break;
case 'Address':
currentArray = currentArray.address;
mappedObj = mapAddress(jsonResponse[i]);
break;
case 'Website':
currentArray = currentArray.website;
mappedObj = mapWebsite(jsonResponse[i]);
}
En esta situación, puedo comprobar el nombre del constructor de objetos y establecer ciertas variables sobre la base de ese nombre. Si el objeto que verifico el nombre es un JSON del servidor, simplemente me da una respuesta genérica de "Objeto" y, por lo tanto, el código no funciona. Me evitar esto mediante el uso de una función de mapeo para cada objeto, tales como:
function mapPhone(phoneObj) {
var id = phoneObj.id;
var contactId = phoneObj.contactId;
var number = phoneObj.number;
var type = phoneObj.type;
var primary = phoneObj.isPrimary;
var className = phoneObj.className;
var phoneNumber = new PhoneNumber(number, type, primary, contactId, id, className);
return phoneNumber;
}
Esto funciona muy bien, pero me parece un poco redundante. ¿Es esta la mejor manera de resolver el problema del objeto JSON, o hay una mejor solución? Entiendo que esto es más un tipo de pregunta "¿Lo estoy haciendo de la mejor manera posible?", Pero repito este tipo de lógica CONSTANTEMENTE en mi código Javascript y me parece que podría obtener otra opinión o no sobre si es o no la forma correcta de hacer esto antes de tener que pasar hora tras hora arreglándolo en el futuro.
EDIT: Terminé aceptando una solución jQuery porque uso jQuery en mi proyecto. Sin embargo, hay varias soluciones que también me funcionaron antes de encontrar la opción jQuery. Simplemente no eran tan limpios y eficientes.
* "objetos JSON (JavaScript) también conocido como" * JSON no es conocido como JavaScript. Tiene su propio nombre porque tiene su propia sintaxis y especificación. –