现在我知道为什么我要避免修改对象原型的库
看起来我收到了这个错误:
TypeError: Converting circular structure to JSON
当我require('should')
这是预期的吗?
在调用JSON.stringify之前,我可以删除要对其进行字符串化的对象的属性,如下所示:
delete obj.should;
delete obj.getShould;
但是对于嵌套对象等很难做到这一点。我不得不说,这应该导致这种情况非常蹩脚,但也许我做错了。如何解决这个问题?我正在编写一个库,用户可能require('should')
所以我必须防止这类问题。
答案 0 :(得分:2)
尽管输出稍有不同,但util.inspect()提供的输出没有循环引用,但却没有。它还提供了自定义对象检查的方法。它会对你有用吗?
答案 1 :(得分:1)
Should
没有直接在对象上设置属性,而是在propotype上设置:
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return should(this);
},
configurable: true
});
必须是阻止对象序列化的其他东西。