Một cách nhanh chóng và dơ bẩn sẽ là như thế này:
Object.prototype.toJSON = function() {
var sobj = {}, i;
for (i in this)
if (this.hasOwnProperty(i))
sobj[i] = typeof this[i] == 'function' ?
this[i].toString() : this[i];
return sobj;
};
Rõ ràng điều này sẽ ảnh hưởng đến sự tuần tự của tất cả các đối tượng trong mã của bạn, và có thể vấp lên mã niave sử dụng lọc for in
vòng. Cách "thích hợp" sẽ là viết một hàm đệ quy có thể thêm hàm toJSON
vào tất cả các thành viên con cháu của bất kỳ đối tượng nào, xử lý các tham chiếu vòng tròn và như vậy. Tuy nhiên, giả sử Javascript đơn luồng (không có Web Worker), phương thức này sẽ hoạt động và không tạo ra bất kỳ tác dụng phụ không mong muốn nào.
Một hàm tương tự phải được thêm vào mẫu của Array để ghi đè đối tượng bằng cách trả về mảng chứ không phải đối tượng. Một tùy chọn khác sẽ được gắn một duy nhất và để cho nó có chọn lọc trả lại một mảng hoặc một đối tượng tùy thuộc vào bản chất của đối tượng nhưng nó có lẽ sẽ chậm hơn.
function JSONstringifyWithFuncs(obj) {
Object.prototype.toJSON = function() {
var sobj = {}, i;
for (i in this)
if (this.hasOwnProperty(i))
sobj[i] = typeof this[i] == 'function' ?
this[i].toString() : this[i];
return sobj;
};
Array.prototype.toJSON = function() {
var sarr = [], i;
for (i = 0 ; i < this.length; i++)
sarr.push(typeof this[i] == 'function' ? this[i].toString() : this[i]);
return sarr;
};
var str = JSON.stringify(obj);
delete Object.prototype.toJSON;
delete Array.prototype.toJSON;
return str;
}
http://jsbin.com/yerumateno/2/edit
tôi sẽ chỉ để lại nhận xét vì tôi không cung cấp một giải pháp đầy đủ. Một thứ có thể giúp là bạn có thể xâu chuỗi một hàm bằng một lệnh gọi 'toString()'. http://jsfiddle.net/HFMaz/ Không chắc chắn về hỗ trợ đa trình duyệt. – user113716
điều này được yêu cầu thường xuyên nhưng tôi không thể tìm thấy bất cứ điều gì có liên quan: \ lý do tại sao bạn có cần phải tuần tự hóa chức năng không? có lẽ có cách nào tốt hơn để sắp xếp mã của bạn? – lincolnk
Điều này dành cho dự án WYSIWYG. Mỗi đối tượng Javascript (với các phương thức) định nghĩa hành vi của các thành phần trang. Nội dung trang (bao gồm cả hành vi JS) phải được lưu phía máy chủ, do đó được tuần tự hóa. –