为什么 PouchDb put(doc) 方法正在编辑我的参数?
Why PouchDb put(doc) method is editing my parameter?
我有一个这样的自定义对象:
function BlobModel(id){
this._id = id;
this._rev = null;
this.filename = '';
this.index = '';
this.data = '';
}
如果我把它放在我的 pouch 数据库中它工作正常,但我有一个奇怪的问题,如果我这样做:
var myDoc = new BlobModel('myId');
db.put(myDoc).then(function(){
console.log(myDoc);
})
console.log 结果:
为什么我的 _rev value 和 _rev_tree 属性 添加到我的 myDoc
参数中,应该添加仅在数据库内的文档中。为什么它的行为与本机对象不同?如何解决?我看到的唯一方法是在放置之前克隆我的对象,但它在重对象上很奇怪。
如果我使用原生对象,它不会被修改:
var myDoc = {
_id: 'myId',
_rev: null,
filename: '',
index: '',
data: ''
}
db.put(myDoc).then(function(){
console.log(myDoc);
});
在 JS 中,对象之间几乎没有区别,PouchDB 插入属性来管理索引 see here。
你可以这样做..
db.put({ mydoc: myDoc })
但这真的是个问题吗?
PouchDB 希望您插入纯 JavaScript 对象作为您的文档。如果您尝试插入自定义 类,那么克隆算法将忽略它,您将开始看到奇怪的错误。
我的建议是 运行 JSON.parse(JSON.stringify(myDoc))
在将其插入 PouchDB 之前。要么,要么不要使用自定义 类.
我有一个这样的自定义对象:
function BlobModel(id){
this._id = id;
this._rev = null;
this.filename = '';
this.index = '';
this.data = '';
}
如果我把它放在我的 pouch 数据库中它工作正常,但我有一个奇怪的问题,如果我这样做:
var myDoc = new BlobModel('myId');
db.put(myDoc).then(function(){
console.log(myDoc);
})
console.log 结果:
myDoc
参数中,应该添加仅在数据库内的文档中。为什么它的行为与本机对象不同?如何解决?我看到的唯一方法是在放置之前克隆我的对象,但它在重对象上很奇怪。
如果我使用原生对象,它不会被修改:
var myDoc = {
_id: 'myId',
_rev: null,
filename: '',
index: '',
data: ''
}
db.put(myDoc).then(function(){
console.log(myDoc);
});
在 JS 中,对象之间几乎没有区别,PouchDB 插入属性来管理索引 see here。
你可以这样做..
db.put({ mydoc: myDoc })
但这真的是个问题吗?
PouchDB 希望您插入纯 JavaScript 对象作为您的文档。如果您尝试插入自定义 类,那么克隆算法将忽略它,您将开始看到奇怪的错误。
我的建议是 运行 JSON.parse(JSON.stringify(myDoc))
在将其插入 PouchDB 之前。要么,要么不要使用自定义 类.