JavaScript. Подробное руководство, 6-е издание, стр. 68
<b> return о;</b><b>}</b><b>/*</b><b>* Возвращает новый объект, содержащий свойства, присутствующие хотя бы в одном</b><b>* из объектов, о или р. Если оба объекта, о и р, имеют свойства с одним</b><b>* и тем же именем, используется значение свойства из объекта р.</b><b>*/</b><b>function union(o,p) { return extend(extend({},о), p); }</b><b>/*</b><b>* Возвращает новый объект, содержащий свойства, присутствующие сразу в обоих</b><b>* объектах, о или р. Результат чем-то напоминает пересечение о и р,</b><b>* но значения свойств объекта р отбрасываются */</b><b>function intersection(o, р) { return restrict(extend({}, о), р); }</b><b>/*</b><b>* Возвращает массив имен собственных перечислимых свойств объекта о.</b><b>*/</b><b>function keys(o) {</b><b> if (typeof о !== "object”) throw ТуреЕггогО; // Apr. должен быть объектом </b><b> var result = []; // Возвращаемый массив</b><b> for(var prop in о) { // Для всех перечислимых свойств</b><b> if (о.hasOwnProperty(prop)) // Если это собственное свойство,</b><b> result.push(prop); // добавить его в массив array.</b><b> }</b><b> return result; // Вернуть массив.</b><b>}</b>В дополнение к циклу
<b>for/in</b><b>Object.keys(),</b><b>keys()</b>Вторая функция ECMAScript 5, выполняющая перечисление свойств, -
<b>Object.getOwnPropertyNames().</b><b>Object.keys(),</b>6.6. Методы чтения и записи свойств
Выше уже говорилось, что свойство объекта имеет имя, значение и набор атрибутов. В ECMAScript 5 [10]
значение может замещаться одним или двумя методами, известными как методы чтения (
<b>getter</b><b>setter</b>Когда программа пытается получить значение свойства с методами доступа, интерпретатор вызывает метод чтения (без аргументов). Возвращаемое этим методом значение становится значением выражения обращения к свойству. Когда программа пытается записать значение в свойство, интерпретатор вызывает метод записи, передавая ему значение, находящее справа от оператора присваивания. Этот метод отвечает за «установку» значения свойства. Значение, возвращаемое методом записи, игнорируется.
В отличие от свойств с данными, свойства с методами доступа не имеют атрибута
<b>writable</b><b>undefined</b>Самый простой способ определить свойство с методами доступа заключается в использовании расширенного синтаксиса определения литералов объектов:
<b>var о = {</b><b> // Обычное свойство с данными </b><b> data_prop: value,</b><b> // Свойство с методами доступа определяется как пара функций </b><b> get accessor_prop() { /* тело функции */ }, </b><b> set accessor_prop(value) { /* тело функции */ }</b><b>};</b>Свойства с методами доступа определяются как одна или две функции, имена которых совпадают с именем свойства и с заменой ключевого слова
<b>function</b><b>ge</b><b>set</b><b>var р = {</b><b> // х и у - обычные свойства с данными, доступные для чтения/записи. </b><b> х: 1.0,</b><b> у: 1.0,</b><b> //r - доступное для чтения/записи свойство с двумя методами доступа. </b><b> // Не забывайте добавлять запятые после методов доступа, </b><b> get r() { return Math.sqrt(this.x*this.x + this.y*this.y); }, </b>