Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么DB put(doc)方法正在编辑我的参数?_Javascript_Pouchdb - Fatal编程技术网

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()。