我正在研究雄辩的JavaScript第7章,并试图在World.prototype.turn函数中使用forEach完成这个部分:
6OGIzAd5Tr
World.prototype.turn = function() {
var acted = [];
this.grid.forEach(function(critter, vector) {
console.log(critter);
if (critter.act && acted.indexOf(critter) == -1) {
acted.push(critter);
this.letAct(critter, vector);
}
}, this);
};我明白这是在做什么(我认为),它正在遍历网格数组中的每个项目,对于找到的每一个生物(所有的生物都在他们的原型中有一个动作方法),它正在检查本地数组中的indexOf。如果它不存在(-1),它就会把它推进去。
我的问题是,每一种生物是如何独特的?当我console.log(critter)时,我得到相同的结果:{ direction: 'e', originChar: 'o' }。
在将第一个标准推到数组之后,这怎么不总是将-1作为indexOf()返回呢?
是因为在elementFromChar中,每个生物都是从带有new的BouncingCritter构造函数中创建的吗?
先谢谢你,试着彻底地学习并正确地理解它:)
发布于 2015-11-24 12:07:56
在Javascript中,对象具有固有的唯一性,因此
var x = { foo: 'bar' };
var y = { foo: 'bar' };
x !== y;
// But
var x = { foo: bar }
x === x;这是一个复杂的主题,你可以读到更多关于这里的内容。本质上,indexOf是在检查那个确切的对象,而不管它的属性值如何。
https://stackoverflow.com/questions/33893076
复制相似问题