Antwort auf: TobyB
Wenn ihr also Den Prototypen von Object erweitert habt, beispielweise weil ihr eine Bibliothek von irgenwoher eingebunden habt oder es gar selbst getan habt, dann würde der for...in Loop hier über diese Eigentschaften ebenfalls iterieren, was zu ungewünschten Nebeneffekten führen kann.


das ist nur dann richtig, wenn man neue Methoden einfach ans Object "dranklatscht" statt sie ordentlich zu definieren

Dirty shit
Code:
if(!Object.prototype.size) {
	Object.prototype.size = function() {
		return Object.keys(this).length;
	}
}

nun wäre die methode bei for(x in obj) dabei

Code:
if(!Object.prototype.size) {
	Object.defineProperty(Object.prototype, 'size', {
		enumerable:	false,
		configurable:	false,
		writable:		false,
		value: function() {
			return Object.keys(this).length;
		}
	});
}


Hierbei wird enumerable auf false gesetzt was einfach soviel heißt wie "diese Methode nicht interieren", ist übrigends standard bei Object.defineProperty

Der Code ließe sich auch noch weiter kürzen, da die settings aktuell default sind.
Code:
if(!Object.prototype.size) {
	Object.defineProperty(Object.prototype, 'size', {
		value: function() {
			return Object.keys(this).length;
		}
	});
}


Weitere Beispiele dazu gibts im Framework unter Tools
_________________________
» AppEntwickler
» Prototype Hater