Naming conflicts aside (what if your definition of "empty" doesn't match some other part of the code?), consider the `Array.prototype.empty` example. You extend `Array`, then some other bit of code
anywhere else in the environment decides to do the following:
var pets = ["dog", "cat", "rabbit", "turtle", "owl", "alligator"];
for(var i in pets) {
console.log(pets[i]);
}
And what do you get?
dog
cat
rabbit
turtle
owl
alligator
function () {
return !this.length;
}
Oops! And here you could argue that the other coder should've known to use hasOwnProperty or forEach or whatever, but, all that aside, extending native object prototypes is an easy way to break code all over the environment.