【问题标题】:Overriding JSON.stringify causing error覆盖 JSON.stringify 导致错误
【发布时间】:2018-07-21 18:35:38
【问题描述】:

我刚刚创建了一个返回 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);
}

【问题讨论】:

  • 函数调用自己!
  • 呃,我还以为是调用原来的JSON.stringify
  • 谢谢老兄,我解决了创建一个本地var originalStringify = JSON.stringify; 然后调用return originalStringify(item, replacer, space);
  • @EduardoRosostolato 你应该发帖as an answer

标签: javascript angularjs json object


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    谢谢大家,我解决了用原始函数创建一个局部变量

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2017-03-31
      • 2016-09-09
      • 2012-04-20
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多