为什么 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 之前。要么,要么不要使用自定义 类.