Khi sử dụng AJAX, tôi có xu hướng truyền đối tượng từ máy chủ của tôi sang Javascript dưới dạng đối tượng JSON (aka Javascript). Một số chức năng trong Javascript của tôi dựa vào loại đối tượng cụ thể mà tôi đang sử dụng. Ví dụ: cho phép sử dụng số điện thoại chẳng hạn. Tôi có một hàm tạo:Ánh xạ đối tượng JSON cho đối tượng 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;
}
Tôi sử dụng khi tạo đối tượng số điện thoại trong Javascript của mình. Trong một số trường hợp, tôi không tạo đối tượng trong JS, tôi lấy đối tượng từ máy chủ để nó xuất hiện dưới dạng một đối tượng chung với các trường giống hệt nhau. Vì vậy, khi mã của tôi dựa vào loại cụ thể bằng cách sử dụng một cái gì đó như thế này:
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]);
}
Trong trường hợp này, tôi kiểm tra tên của hàm tạo đối tượng và đặt các biến nhất định dựa trên tên đó. Nếu đối tượng tôi kiểm tra tên trên là một JSON từ máy chủ, nó chỉ đơn giản là cung cấp cho tôi một phản ứng "đối tượng" chung chung và do đó mã không hoạt động. Tôi nhận được thông tin này bằng cách sử dụng chức năng lập bản đồ cho từng đối tượng như:
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;
}
Điều này làm việc tốt, nhưng với tôi có vẻ hơi dư thừa. Đây có phải là cách tốt nhất để giải quyết vấn đề đối tượng JSON hoặc có giải pháp tốt hơn không? Tôi hiểu rằng đây là một loại câu hỏi "Tôi làm điều này tốt nhất có thể", nhưng tôi lặp lại loại logic này một cách chắc chắn trong mã Javascript của tôi và tôi cũng có thể nhận được một hoặc hai ý kiến khác về việc có hay không cách thích hợp để làm điều này trước khi tôi phải bỏ ra hàng giờ để sửa nó trong tương lai.
EDIT: Tôi đã kết thúc việc chấp nhận một giải pháp jQuery vì tôi tình cờ sử dụng jQuery trong dự án của tôi. Tuy nhiên có nhiều giải pháp mà cũng làm việc cho tôi trước khi tôi tìm thấy tùy chọn jQuery. Họ không hoàn toàn sạch sẽ và hiệu quả.
* "đối tượng JSON (aka Javascript)" * JSON không phải là aka JavaScript. Nó có tên riêng vì nó có cú pháp và đặc tả riêng. –