JavaScript 为对象指定新的JSON序列化行为

      在很多情况下,我们并不希望,JavaScript JSON 序列化对象时 暴露当前的“工作模型”or“领域模型”某些成员或字段时,我们可能会大费周章的手动序列化,除此 JavaScript Date 日期时间类型的序列化,在默认情况下是未经历过 Iso 日期格式化的,所以序列化后的时间服务器并不能正确的序列化。

      现在,我们希望可以更加友好快速的解决这些问题,那么我们可以通过 ECMAScript 5.0 定义的 JavaScript To JSON 序列化定义规范的即可。

    在 ECMAScript 5.0 中 当一个 JavaScript 对象被序列化时,JSON 序列化引擎,首先会测量此“对象”是否存在“toJSON”属性,同时“toJSON”属性是否是一个“function”,若成功则 JSON 序列化引擎会将当前对象的序列化处理,交付于“此对象的 toJSON 函数“。

      例:

var foo = new Object({});
foo.toJSON = function () {
    return 'this a foo';
}

    但 toJSON 只返回允许基础的类型,返回”function“的类型是绝对不被允许的,但”object、number、undefined、null、string“这类型的值是被允许的,同时 toJSON 函数还隐藏了一个致命的陷阱,当对象的 toJSON 函数一直在调用类似如 JSON.stringify(this) 时,那么必定会造成”堆栈溢出“的问题(递归造成的死循环),JSON.stringify 函数并不会推测当前的调用堆栈中是否处于死循环的状态。

var foo = new Object({});
foo.toJSON = function () {
    return JSON.stringify(this);
}

猜你喜欢

转载自blog.csdn.net/liulilittle/article/details/80813697