Существует ли способ 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 - или нет.
Я вижу, что цикл через унаследованные свойства может быть полезен в некоторых сценариях (клонирование или подкласс или как вы это называете).