2010-12-10 34 views
6

Tôi có một số đối tượng được deserialized từ JSON mà tôi muốn gán một mẫu thử nghiệm mới để cung cấp các hàm getter và setter khác nhau. Cách rõ ràng để làm điều này (như đã đề cập trong this question) là để thiết lậpCách thích hợp để gán cho thuộc tính __proto__

myJsonObj.__proto__ = { function1: /* ... */, function2: /* ... */ }; 

Tuy nhiên, như MDC helpfully points out, các __proto__ tài sản là phi tiêu chuẩn và bị phản đối. Có cách nào phù hợp với tiêu chuẩn (đối với một số định nghĩa của "tiêu chuẩn") để đạt được cùng một hiệu ứng, mà không cần phải tạo ra nhiều đối tượng bao bọc mới?

+0

Các tài liệu liên quan đến bạn cho thấy rằng bạn "Sử dụng Object.getPrototypeOf() thay vì" ([getPrototypeOf()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf)). Vì vậy, một cái gì đó như thế này: 'var proto = myJsonObj.getPrototypeOf(); proto.function1 =/* mọi thứ * /; proto.function2 =/* bất cứ điều gì * /; ' – Lee

+0

Lee, nếu tôi không nhầm, gọi' Object.getPrototypeOf (myJsonObj) 'sẽ cho tôi' Object.prototype' (vì 'myJsonObj' không có bất kỳ hàm tạo khác nào). Điều đó có nghĩa là bằng cách làm theo gợi ý của bạn, tôi sẽ sửa đổi 'Object' (rất xấu) thay vì tiêm một lớp vào' myJsonObj'. – kpozin

Trả lời

4

Không có tiêu chuẩn nào phù hợp để thay đổi nguyên mẫu của đối tượng sau khi tạo. Có một cách tuân thủ tiêu chuẩn để tạo các đối tượng với bất kỳ mẫu thử nghiệm nào bạn muốn trong khi phân tích cú pháp từ JSON.

Từ http://www.json.org/js.html:

Tham số tùy chọn Reviver là một chức năng sẽ được gọi cho mỗi khoá và giá trị ở mọi cấp độ của kết quả cuối cùng . Mỗi giá trị sẽ là được thay thế bằng kết quả của chức năng thu hồi . Điều này có thể được sử dụng để cải cách đối tượng chung thành các trường hợp của kính giả hoặc để biến đổi ngày chuỗi thành các đối tượng Ngày tháng.

Các vấn đề liên quan