覆盖JSON.stringify导致错误

时间:2018-02-11 13:43:05

标签: javascript angularjs json object

我刚刚创建了一个返回JSON.stringify的函数:

JSON.stringify = function (item, replacer, space) {
     return JSON.stringify(item, replacer, space);
}

它会导致angularjs上的所有这些错误: click here

我想覆盖该函数的原因是因为我想在对象中创建一个属性,告诉JSON忽略一个字段,如下所示:

JSON.stringify = function (item, replacer, space) {
    if (angular.isObject(item)) {
        var newItem = angular.copy(item);
        var ignores = item.jsonIgnore || [];

        ignores.forEach(prop => {
            delete newItem[prop];
        });

        return JSON.stringify(newItem, replacer, space);
    }

    return JSON.stringify(item, replacer, space);
}

2 个答案:

答案 0 :(得分:0)

这是一个没有任何结束条件的递归函数。您可以通过创建本地函数来解决问题:

var localStringify = function (item, replacer, space) {
    ...
}

或者考虑this thread中给出的解释,覆盖原始函数。

答案 1 :(得分:0)

谢谢大家,我决定用原始函数

创建一个局部变量
var originalStringify = JSON.stringify;

然后调用我的自定义函数

return originalStringify(item, replacer, space);

现在我的完整Json忽略覆盖功能是这样的:

// JSON ignore
var original = JSON.stringify;

JSON.stringify = function (item, replacer, space) {
    if (angular.isObject(item)) {
        var newItem = angular.copy(item);
        var ignores = item.jsonIgnore || [];

        ignores.forEach(prop => {
            delete newItem[prop];
            delete newItem.jsonIgnore;
        });

        return original(newItem, replacer, space);
    }

    return original(item, replacer, space);
}