JavaScript: Как определить не перечисляемый метод без использования Object.defineProperty? - PullRequest
4 голосов
/ 09 декабря 2011

Я хочу добавить метод в Object, но теперь он есть у всех массивов и объекта.Когда я использую for(.. in ..), он перечисляется, и это проблема моего программного обеспечения.Итак, мне нужно сделать мой метод не перечисляемым.

Я знаю, что есть Object.defineProperty(), но он не поддерживается старым браузером (который все еще существует) и даже последними версиями Konqueror.

Есть ли другой способ сделать метод не перечисляемым?

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Нет.Вот почему считается плохой практикой использовать JavaScript for..in без немедленной проверки на hasOwnProperty.То есть вы всегда должны делать:

for (var item in obj) {
    if (obj.hasOwnProperty(item)) {
        // ...
    }
}

Инструменты типа JSLint сообщат об ошибке в вашем коде, если вы используете for..in без проверки hasOwnProperty.

0 голосов
/ 20 апреля 2013

Для ECMAScript 3 (использовавшегося в старом браузере) вы не можете изменить перечисляемый атрибут.
Если вы хотите отфильтровать метод, возможно, вы можете проверить тип объекта для (... в ..).

...