_.map返回时覆盖值

时间:2015-04-03 06:20:18

标签: javascript node.js lodash

使用lodash _.ma函数时,我注意到了一些奇怪的行为。 (那或者我公然忽略了什么)

我有以下内容:

_this.searches = _.map(body.rows, function(row) {
    var tmpSearch = new Search(row.value);
    console.log(tmpSearch.search['name']);
    return tmpSearch.search;
});

Search只是一个带有一些原型函数的标准javascript对象。

但是,当我检查_this.searches时,每个对象都是相同的,我试图遍历它以获得更好的结果:

_.forEach(_this.searches, function(search) {
    console.log(search['name']);
})

console.log的{​​{1}}是:

_.map

2015-04-03T14:14:29+0800 <log> searches.js:35 () test 2015-04-03T14:14:29+0800 <log> searches.js:35 () Test 2 2015-04-03T14:14:29+0800 <log> searches.js:35 () Testing search 的{​​{1}}是:

console.log

可在此处找到_.forEachhttp://pastebin.com/4y6taGUr 虽然没有什么特别的事情发生。

1 个答案:

答案 0 :(得分:1)

所以问题在于:

Search.prototype.search = {};

只要将search属性放入Search类的原型中,它就会在Search的所有实例之间共享。因此,此属性的每次更改都会影响所有实例。这就是为什么你总能看到最后指定的值 要修复它 - 将此属性放入实例本身,例如在构造函数中:

var Search = function(searchDoc) {
    this.search = {};
    if(!_.isEmpty(searchDoc)) this.setSearch(searchDoc);
};

请参阅jsbin