Javascript 为什么DB put(doc)方法正在编辑我的参数?
我有一个自定义对象,如下所示:Javascript 为什么DB put(doc)方法正在编辑我的参数?,javascript,pouchdb,Javascript,Pouchdb,我有一个自定义对象,如下所示: function BlobModel(id){ this._id = id; this._rev = null; this.filename = ''; this.index = ''; this.data = ''; } 如果我把它放在我的邮袋数据库中,它可以正常工作,但如果我这样做,我会遇到一个奇怪的问题: var myDoc = new BlobModel('myId'); db.put(myDoc).then(f
function BlobModel(id){
this._id = id;
this._rev = null;
this.filename = '';
this.index = '';
this.data = '';
}
如果我把它放在我的邮袋数据库中,它可以正常工作,但如果我这样做,我会遇到一个奇怪的问题:
var myDoc = new BlobModel('myId');
db.put(myDoc).then(function(){
console.log(myDoc);
})
console.log结果:
为什么我在我的myDoc
参数中添加了\u rev value和\u rev\u tree属性,它应该只添加到数据库中的文档中。为什么它与本机对象的行为不同?如何修复它?我看到的唯一方法是在放置之前克隆我的对象,但在重的对象上这很奇怪
如果使用本机对象执行此操作,则不会对其进行修改:
var myDoc = {
_id: 'myId',
_rev: null,
filename: '',
index: '',
data: ''
}
db.put(myDoc).then(function(){
console.log(myDoc);
});
在JS中,对象之间几乎没有区别,PockDB插入适当的属性来管理索引 你可以这样做
db.put({ mydoc: myDoc })
但这真的是个问题吗?在JS中,对象之间几乎没有区别,PockDB插入了适当的属性来管理索引 你可以这样做
db.put({ mydoc: myDoc })
但这真的是一个问题吗?PockDB希望您插入普通JavaScript对象作为文档。如果您尝试插入自定义类,那么克隆算法将忽略它,并且您将开始看到奇怪的错误
我的建议是在将其插入数据库之前运行
JSON.parse(JSON.stringify(myDoc))
。要么这样,要么不要使用自定义类。PockDB希望您插入普通JavaScript对象作为文档。如果您尝试插入自定义类,那么克隆算法将忽略它,并且您将开始看到奇怪的错误
我的建议是在将其插入数据库之前运行
JSON.parse(JSON.stringify(myDoc))
。要么这样,要么就不要使用自定义类。谢谢您的帮助,但这并不能真正解决问题。我想确切地知道为什么我没有对本机对象执行此行为。好的,我知道PockDB插入属性,但它不应该直接修改我放入参数中的对象。谢谢你的帮助,但它并没有真正回答。我想确切地知道为什么我没有对本机对象执行此行为。好的,我知道PockDB插入属性,但它不应该直接修改我放入参数中的对象。感谢帮助,我将在自定义类中添加一个方法toPlainObject()。感谢帮助,我将在自定义类中添加一个方法toPlainObject()。