I was attempting to extend Javascript's Object type with a function that retrieves all of the property names that are part of that object (basically what PHP's array_keys()
function does to associative arrays).
Object.prototype.keys = function() {
var a = [];
for (var property in this) {
a.push(property);
}
return a;
};
var a = {a:1,b:2,c:3,d:4};
alert(a.toSource());
var b = a.keys();
alert(b.toSource());
When the variable b
was alerted, I was expecting to see ["a","b","c","d"]
, instead I'm seeing ["a","b","c","d","keys"]
.
It appears the for-in loop is including the prototyped keys()
functions.
Is it possible to avoid this behaviour whilst still prototying, or should I just avoid prototyping all together?