使用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
可在此处找到_.forEach
:http://pastebin.com/4y6taGUr
虽然没有什么特别的事情发生。
答案 0 :(得分:1)
所以问题在于:
Search.prototype.search = {};
只要将search
属性放入Search
类的原型中,它就会在Search
的所有实例之间共享。因此,此属性的每次更改都会影响所有实例。这就是为什么你总能看到最后指定的值
要修复它 - 将此属性放入实例本身,例如在构造函数中:
var Search = function(searchDoc) {
this.search = {};
if(!_.isEmpty(searchDoc)) this.setSearch(searchDoc);
};
请参阅jsbin。