Для старых версий JS, а точнее ECMAScript 3, тот что в IE8:
Расширить объект, без того, что бы добавляемые свойства не были перечисляемыми - не выйдет.
В таких случаях, да и вообще при использовании for ... in обычно каждое свойство проверяется на hasOwnProperty
for (var key in testObj) {
if (!testObj.hasOwnProperty(key)) continue;
//Тут мог быть ваш код
}
Как-то так вроде бы.
Вот тут есть информация по этой теме:
learn.javascript.ru/native-prototypesUPD: для более-менее современных барузеров
Если не нужно старые браузеры поддерживать, есть Object.defineProperty()
Object.defineProperty( Object.prototype, 'count' {
value: function count() { /* тело функции */ },
enumerable: false
});
Дескриптор enumerable позволяет в зависимости от значения, делать свойство перечисляемым или нет, при обходе объекта в цикле for ... in.
habrahabr.ru/post/150571