Установка пользовательского свойства с помощью DontEnum - PullRequest
4 голосов
/ 15 мая 2009

Если я создам:

Object.prototype.count = function() {};
var m = {prop: 1};

for(var i in m)
    window.status += i + ", ";

в приведенном выше коде i содержит также count, унаследованный его прототипом. Теперь хочу чтобы узнать, есть ли способ установить пользовательское свойство как флаг DontEnum (его нельзя установить для пользовательского свойства), чтобы оно не было перечислено.

Я знаю, что могу сделать if(m.hasOwnProperty(i)), чтобы проверить только его свойство, но если я написать своего рода API массива, который я должен сказать программисту, чтобы он запомнил это ... и это не приемлемо!

Ответы [ 2 ]

4 голосов
/ 16 мая 2009

На самом деле, объект Object имеет свойство 'propertyIsEnumerable', но он не очень полезен. Может быть, http://dhtmlkitchen.com/learn/js/enumeration/dontenum.jsp может дать вам больше понимания? Если вы будете следовать главам, вы окажетесь на странице с простым вопросом «Как установить атрибут DontEnum», ответив еще более простым и довольно разочаровывающим: «Вы не можете». К счастью, есть еще главы. Вы должны оказаться на странице, содержащей интересную фразу: «Хорошо, хорошо, IE - это дерьмо, JavaScript - отстой, бла, бла… пора перестать жаловаться и закатать рукава». Суть учебника в следующем: « Перечислимость в JavaScript создает серьезную проблему

3 голосов
/ 24 марта 2011

Начиная с JavaScript 1.8.5, вы можете использовать метод Object defineProperty :

Object.defineProperty (object, propertyName, attributes);

Где attributes - карта, в которой вы можете установить различные атрибуты, такие как value, enumerable и writable. Если свойство существует, оно изменяется, в противном случае оно создается.

Юрий Зайцев создал таблицу совместимости ECMAScript 5 , в которой вы можете найти браузеры, поддерживающие defineProperty (и многие другие функции), хотя он не учел, что Safari не поддерживает defineProperty для DOM объекты - просто противоположность IE !!! :( -

EDIT

Юрий обновил таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...