diff --git a/src/Angular.js b/src/Angular.js index 4ba95d10a1dd..371a56c0366e 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -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; diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 92949b66725e..cb0c5c6be641 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -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']);