_.map覆盖返回值

使用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对象与一些原型function。

然而,当我检查_this.searches ,每个对象是相同的,我试图循环通过它得到一个更好的结果:

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

_.mapconsole.log是这样的:

 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 

这个_.forEachconsole.log是这样的:

 2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search 2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search 2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search 

Search可以在这里find: http : //pastebin.com/4y6taGUr虽然没有什么特别的事情。

所以问题是一致的:

 Search.prototype.search = {}; 

只要将search属性放入Search类的原型中,它就会在所有Search实例之间共享。 所以这个属性的每一个变化都会影响所有的实例 这就是为什么你总是看到最后分配的值。
为了解决这个问题 – 把这个属性放入实例本身,例如在构造函数中:

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

看到jsbin 。