Я делаю небольшую библиотеку, похожую на jQuery, и одна вещь, которая кажется мне странной, - это поведение _1 _ а>.
В javascript у нас есть цикл for...in
:
for (var key in obj) {
console.log(key + ': ' + obj[key]);
}
Проблема в том, что он также будет перебирать унаследованные свойства, то есть свойства, поступающие из прототипа конструктора объекта.
Это можно узнать, например, с помощью hasOwnProperty
. . И jQuery может сделать это.
Но когда вы передаете объект в $.each
, он ведет себя в точности как for...in
, также выполняя итерацию по унаследованным свойствам. Он также должен быть немного медленнее и требует для ввода еще нескольких символов.
Проверьте эту скрипку, чтобы увидеть ее в действии и найдите здесь исходный код $.each
.
Итак, мой вопрос: есть ли в jQuery метод итерации object, который включает только собственные свойства? Если нет, должна ли библиотека вести себя так?
Изменить: поскольку jQuery этого не делает, вы также можете ответить, полезно ли это. Я имею в виду, что я не вижу, что хочу перебирать свойства прототипа, но, возможно, я что-то упускаю.
hasOwnProperty
. jsfiddle.net/mpTkA/2 - person Selvakumar Arumugam   schedule 03.12.2012Object.keys()
есть в новых браузерах. - person Pointy   schedule 03.12.2012hasOwnProperty
в вопросе. - person Camilo Martin   schedule 03.12.2012var
дляkey
:for (var key in obj)
. В противном случае вы получите случайное глобальное. (Если вы действительно не хотите, чтобыkey
был глобальным, в этом случае вам, вероятно, следует найти лучший способ делать то, что вы хотите.) Другое небольшое примечание: При использованииhasOwnProperty
это может быть немного безопаснее сохранить ссылку вместо того, чтобы называть ее точечной нотацией:var has = Object.prototype.hasOwnProperty; has.call({abc: 'xyz'}, 'abc');
. - person Keen   schedule 03.12.2012