JavaScript. Подробное руководство, 6-е издание, стр. 441

Пример

<b>var о = new Object(): // Создать объект</b>

<b>Object.prototype.isPrototypeOf(о) //true: о - объект</b>

<b>Function.prototype.isPrototypeOf(o.toString); // true: toString - функция </b>

<b>Array.prototype.isPrototypeOf([1,2,3]): // true: [1,2,3] - массив</b>

<b>// Ту же проверку можно выполнить другим способом</b>

<b>(о.constructor == Object): // true: о создан с помощью конструктора</b>

<b>Object() (о.toString.constructor == Function): // true: о.toString - функция</b>

<b>// Объекты-прототипы сами имеют прототипы. Следующий вызов вернет true, показывая, что</b>

<b>// объекты-функции наследуют свойства от Function.prototype, а также от Object.prototype. </b>

<b>Object.prototype.isPrototypeOf(Function.prototype):</b>

См. также

Function.prototype, Object.constructor; глава 9

Object.isSealed() (ECMAScript 5)

возможно ли добавлять в объект новые и удалять существующие свойства?

Синтаксис

<b>Object.isSealed(o)</b>

Аргументы

о Проверяемый объект.

Возвращаемое значение

true, если объект о является нерасширяемым, с недоступными для настройки свойствами, и false - если нет.

Описание

Объект считается нерасширяемым, с недоступными для настройки свойствами, если в него нельзя добавить новые (неунаследованные) свойства и нельзя удалить существующие (неунаследованные) свойства. Функция

<b>Object.isSealed()</b>
проверяет, является ли ее аргумент нерасширяемым объектом, с недоступными для настройки свойствами, или нет. Недоступные для настройки свойства нельзя вновь сделать настраиваемыми. Обычно такие объекты получают с помощью функции
<b>Object.seal()</b>
или
<b>Object.freeze().</b>
Однако того же эффекта можно добиться с помощью функции
<b>Object.preventExtensions(),</b>
с последующим вызовом
<b>Object.defineProperty(),</b>
чтобы сделать все свойства объекта неудаляемыми.

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

См. также

Object.defineProperty(), Object.freeze(), Object.isExtensible(), Object.isFrozen(), Object. preventExtensions(), Object.seal(), раздел 6.8.3

Object.keys() (ECMAScript 5)

возвращает имена собственных перечислимых свойств

Синтаксис

<b>Object.keys(o)</b>

Аргументы

о Объект.

Возвращаемое значение

Массив, содержащий имена всех перечислимых (неунаследованных) свойств объекта о.

Описание

Функция

<b>Object.keys()</b>
возвращает массив с именами свойств объекта о. Массив включает только имена свойств, которые являются перечислимыми и определены непосредственно в объекте о: унаследованные свойства не включаются. (Для получения имен неперечислимых свойств можно использовать функцию
<b>Object.getOwnPropertyNames().</b>
) Свойства в массиве следуют в том же порядке, в каком они перечисляются циклом
<b>for/in</b>
.

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

Пример

<b>Object.keys({х:1, у:2}) // =&gt; [”х&quot;, &quot;у&quot;]</b>

См. также

Object.getOwnPropertyNames(), разделы 5.5.4, 6.5

Object.preventExtensions() (ECMAScript 5)

предотвращает добавление в объект новых свойств

Синтаксис

<b>Object.preventExtensions(o)</b>

Аргументы

о Объект, который должен иметь расширяемый набор атрибутов.

Возвращаемое значение

Объект о с аргументами.

Описание

Функция

<b>Object.preventExtensions()</b>
присваивает значение false атрибуту
<b>extensible</b>
объекта о, вследствие чего в него нельзя будет добавлять новые свойства. Действие этой функции необратимо: нерасширяемый объект нельзя вновь сделать расширяемым.

Следует отметить, что

<b>Object.preventExtensions()</b>
не воздействует на цепочку прототипов, и нерасширяемый объект все еще можно расширить новыми наследуемыми свойствами.

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

См. также

Object.freeze(), Object.isExtensible(), Object.seal(), раздел 6.8.3

Object.propertyIsEnumerable()

проверяет, будет ли свойство видимо для цикла

<b>for/in</b>

Синтаксис

<b>объект.propertyIsEnumerable(имя_свойства)</b>

Аргументы

имя_свойства Строка, содержащая имя свойства объекта.

Возвращаемое значение

Возвращает true, если у объекта есть неунаследованное свойство с именем, указанным в аргументе имя_свойства, и если это свойство «перечислимое», т.е. оно может быть перечислено циклом

<b>for/in</b>
для объекта.

Описание

Инструкция

<b>for/in</b>
выполняет цикл по «перечислимым» свойствам объекта. Однако не все свойства объекта являются перечислимыми: свойства, добавленные в объект программным способом, перечислимы, а предопределенные свойства (например, методы) встроенных объектов обычно неперечислимы. Метод
<b>propertyIsEnumerable()</b>
позволяет установить различия между перечислимыми и неперечислимыми свойствами. Однако следует заметить: спецификация ECMAScript утверждает, что
<b>propertyIsEnumerable()</b>
не проверяет цепочку прототипов, т.е. этот метод годится только для локальных свойств объекта и не предоставляет способа для проверки перечисляемости унаследованных свойств.