fix(forEach): should ignore prototypically inherited properties

Closes #813
This commit is contained in:
Igor Minar 2012-03-21 15:42:35 -07:00
parent 5fdab52dd7
commit 8d7e694849
2 changed files with 24 additions and 2 deletions

View file

@ -117,8 +117,11 @@ function forEach(obj, iterator, context) {
for (key = 0; key < obj.length; key++)
iterator.call(context, obj[key], key);
} else {
for (key in obj)
iterator.call(context, obj[key], key);
for (key in obj) {
if (obj.hasOwnProperty(key)) {
iterator.call(context, obj[key], key);
}
}
}
}
return obj;

View file

@ -234,6 +234,25 @@ describe('angular', function() {
});
});
describe('forEach', function() {
it('should iterate over *own* object properties', function() {
function MyObj() {
this.bar = 'barVal';
this.baz = 'bazVal';
};
MyObj.prototype.foo = 'fooVal';
var obj = new MyObj(),
log = [];
forEach(obj, function(value, key) { log.push(key + ':' + value)});
expect(log).toEqual(['bar:barVal', 'baz:bazVal']);
});
});
describe('sortedKeys', function() {
it('should collect keys from object', function() {
expect(sortedKeys({c:0, b:0, a:0})).toEqual(['a', 'b', 'c']);