我正在使用toJSON函数扩展一个非常基本的$ firebaseObject,它看起来完全像:
toJSON: function() {
var data = $firebaseUtils.toJSON(this);
return data;
}
我在gist of Katowulf后面对自己,但我一直收到这个错误:
RangeError: Maximum call stack size exceeded
at Object.isObject (angular.js:590)
at Object.toJSON (angularfire.min.js:1)
at a.toJSON (tournament.js:375)
at Object.toJSON (angularfire.min.js:1)
at a.toJSON (tournament.js:375)
at Object.toJSON (angularfire.min.js:1)
at a.toJSON (tournament.js:375)
at Object.toJSON (angularfire.min.js:1)
at a.toJSON (tournament.js:375)
at Object.toJSON (angularfire.min.js:1)
当我深入研究一下时,使用console.trace(),它表明我的toJSON函数一次又一次地调用自身,这会产生无限循环。
它始于:
toJSON @ tournament.js:375
toJSON @ angularfire.min.js:1
...
继续下去:
toJSON @ tournament.js:375
toJSON @ angularfire.min.js:1
toJSON @ tournament.js:376
toJSON @ angularfire.min.js:1
...
最多:
toJSON @ tournament.js:375
toJSON @ angularfire.min.js:1
toJSON @ tournament.js:376
toJSON @ angularfire.min.js:1
toJSON @ tournament.js:376
toJSON @ angularfire.min.js:1
toJSON @ tournament.js:376
toJSON @ angularfire.min.js:1
toJSON @ tournament.js:376
toJSON @ angularfire.min.js:1
toJSON @ tournament.js:376
toJSON @ angularfire.min.js:1
toJSON @ tournament.js:376
toJSON @ angularfire.min.js:1
toJSON @ tournament.js:376
toJSON @ angularfire.min.js:1
...
当删除toJSON时它工作正常,但我真的需要做一些工作才能保存到firebase。
编辑:仔细研究一下$ firebaseUtils.toJSON()源代码之后,我明白为什么我会在这里得到一个无限循环,但我想知道kato的版本是如何工作的?