Существует ли способ jQuery для перебора объектов только с собственными свойствами?

Я делаю небольшую jQuery-подобную библиотеку, и меня поражает одна вещь - поведение $.each,

В JavaScript у нас есть for...in цикл:

for (var key in obj) {
    console.log(key + ': ' + obj[key]);
}

Проблема в том, что он будет перебирать и унаследованные свойства, то есть свойства, полученные из прототипа конструктора объекта.

Это можно узнать, используя hasOwnProperty, например. И JQuery может сделать это.

Но когда вы передаете объект $.each, он ведет себя точно так же, как for...in итерируя и унаследованные свойства. Это также должно быть немного медленнее, и для ввода требуется еще несколько символов.

Проверьте эту скрипку, чтобы увидеть ее в действии и посмотрите здесь исходный код $.each,

Итак, мой вопрос: есть ли в jQuery метод итерации объекта, который включает только собственные свойства? Если нет, должна ли библиотека вести себя так?

Изменить: Поскольку jQuery не делает этого, вы также можете ответить, если это полезно. Я имею в виду, я не вижу себя желающим перебирать свойства прототипа, но, возможно, я что-то упустил.

1 ответ

Поведение jQuery имеет смысл, поскольку вы всегда можете добавить проверку цикла hasOwnProperty - или нет.

Я вижу, что цикл через унаследованные свойства может быть полезен в некоторых сценариях (клонирование или подкласс или как вы это называете).

Другие вопросы по тегам