Как добавить метод объекту, чтобы его не было видно при переборе объектов?

Доброе утро!

Есть объект testObj с добавленным методом count, когда перебираем его, получаем: count, p1 и p2.
Как убрать из этого списка добавленный метод count? (Можно конечно сделать проверку типа значения св-ва на функцию, но это придется делать при каждом переборе объекта, что не есть хорошо)
Object.prototype.count = function() {
	var count = 0;
	
	for(var key in this) {
		count++;
	}
	
	return count;
}

var testObj = {'p1': 124, 'p2': 6231};

for(var key in testObj) {
	console.log(key);
}
  • Вопрос задан
  • 2427 просмотров
Решения вопроса 1
@GeraldIstar
Frontend
Для старых версий JS, а точнее ECMAScript 3, тот что в IE8:
Расширить объект, без того, что бы добавляемые свойства не были перечисляемыми - не выйдет.
В таких случаях, да и вообще при использовании for ... in обычно каждое свойство проверяется на hasOwnProperty
for (var key in testObj) {
  if (!testObj.hasOwnProperty(key)) continue;
  //Тут мог быть ваш код 
}

Как-то так вроде бы.
Вот тут есть информация по этой теме:
learn.javascript.ru/native-prototypes

UPD: для более-менее современных барузеров
Если не нужно старые браузеры поддерживать, есть Object.defineProperty()
Object.defineProperty( Object.prototype, 'count' {
    value: function count() { /* тело функции */ },
    enumerable: false
});

Дескриптор enumerable позволяет в зависимости от значения, делать свойство перечисляемым или нет, при обходе объекта в цикле for ... in.
habrahabr.ru/post/150571
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы