Простой:
for(var propertyName in myObject) {
// propertyName is what you want
// you can get the value like this: myObject[propertyName]
}
Теперь вы не получите частные переменные таким образом, потому что они не доступны.
EDIT: @bitwiseplatypus является правильным, что если вы не используете метод hasOwnProperty()
, вы получите свойства, которые наследуются - впрочем, я не знаю, почему кто знаком с объектно-ориентированного программирования было бы ожидать чего-то меньше! Как правило, кто-то, кто приносит это, подвергался предупреждению Дугласа Крокфорда об этом, что меня несколько путало. Опять же, наследование является нормальной частью языков OO и поэтому является частью JavaScript, несмотря на то, что оно является прототипом.
Теперь, что сказал, hasOwnProperty()
является полезно для фильтрации, но мы не должны звучать предупреждение, как будто что-то опасное в получении унаследованных свойств.
EDIT 2: @bitwiseplatypus вызывает ситуацию, когда кто-то добавит свойства/методы к вашим объектам в определенный момент времени позже, чем когда вы первоначально написали свои объекты (через свой прототип), - хотя это правда, вызывают неожиданное поведение, я лично не вижу в этом проблемы. Просто вопрос мнения. Кроме того, что, если я создаю вещи таким образом, что я использую прототипы во время построения моих объектов и все же имею код, который выполняет итерации по свойствам объекта, и я хочу все унаследованные свойства? Я бы не использовал hasOwnProperty()
. Тогда, скажем, кто-то добавляет новые свойства позже. Это моя вина, если в этом случае ситуация плохо себя ведет? Я так не думаю. Я думаю, именно поэтому jQuery, в качестве примера, указал способы расширения его работы (через jQuery.extend
и jQuery.fn.extend
).
Дата не имеет значения при выборе дубликатов. Лучший вопрос остается открытым, другой закрыт как дубликат. – meagar