Конфигурируемые свойства объекта. — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Конфигурируемые свойства объекта.

2017-06-29 304
Конфигурируемые свойства объекта. 0.00 из 5.00 0 оценок
Заказать работу

Свойства объекта часто определяют как пары «ключ-значение». По большому счету это не совсем так. Кроме собственно имени и значения свойства также имеют так называемые атрибуты. В спецификации ECMAScript 3 атрибуты свойств не доступны для чтения и записи, однако, в ECMAScript 5 предусмотрены методы для работы с атрибутами свойств.

Атрибуты свойств

value — содержит непосредственно данные

writable — определяет, доступно ли данное свойство для записи (по умолчанию, true)

set — содержит setter, функцию, которая вызывается при записи свойства

get — содержит getter, функцию, которая вызывается при чтении свойства

enumerable — определяет доступность свойства для перечисления

configurable — определяет доступность свойства для изменения (например, может ли свойство быть удалено, может ли быть изменен какой-либо атрибут свойства)

Дескрипторы свойств

Дескриптор свойства объекта описывает атрибуты свойства в виде объекта, именами свойств этого объекта являются названия атрибутов, а значениями — значения атрибутов. Получить дескриптор свойства можно с помощью метода Object.getOwnPropertyDescriptor().

Получим дескрипторы свойств объекта circle:

var circle = { x: 0, y: 0, r: 15,};console.log(Object.getOwnPropertyDescriptor(circle, 'r'));/* Получим объект{ configurable: true, enumerable: true, value: 15, writable: true,}*/

С дескрипторами свойств также работают следующие функции:

Object.defineProperty() — создает или изменяет свойство объекта, возвращает модифицированный объект:

const bob2 = {

age: 20,

};

Object.defineProperty(

bob2,

'name',

{

value: 'Bob',

}

);

Object.defineProperty(

bob2,

'age',

{

configurable: true,

value: 21,

}

);

Object.defineProperties() — метод аналогичен defineProperty, но позволяет оперировать сразу с несколькими свойствами. Также возвращает модифицированный объект.

Object.defineProperties(bob2, { name: { value: 'Jhon', }, age: { value: 36, enumerable: false, },});

Object.create() — создание объекта. В качестве первого параметра принимает объект-прототип создаваемого объекта, в качестве второго необязательного параметра — список свойств объекта.

Перечислимые свойства объекта

Атрибут enumerable определяет, доступно ли свойство для перечисления, а именно, будет ли оно доступно в циклах for/in, все остальные операции игнорирую атрибут enumerable.

Иммутабельность объектов. Копирование объектов.

Что такое иммутабельность?

Неизменяемым (англ. immutable) называется объект, состояние которого не может быть изменено после создания. Результатом любой модификации такого объекта всегда будет новый объект, при этом старый объект не изменится.

var immutableArr = Immutable([1, 2, 3, 4]);var newImmutableArr = immutableArr.concat([5]);console.log(immutableArr); //[1, 2, 3, 4];console.log(newImmutableArr); //[1, 2, 3, 4, 5];

Речь не идет о глубоком копировании: если объект имеет вложенную структуру, то все вложенные объекты, не подвергшиеся модификации, будут переиспользованы:

var state = Immutable({ style: { color: { r: 128, g: 64, b: 32, }, font: { family: 'sans-serif', size: 14, }, }, text: 'Example', bounds: { size: { width: 100, height: 200, }, position: { x: 300, y: 400, }, },});var nextState = state.setIn(['style', 'color', 'r'], 99);state.bounds === nextState.bounds; //truestate.text === nextState.text; //true

В памяти объекты будут представлены следующим образом:

 

Копирование по ссылке

Фундаментальным отличием объектов от примитивов, является их хранение и копирование «по ссылке». В переменной, которой присвоен объект, хранится не сам объект, а «адрес его места в памяти», иными словами – «ссылка» на него.

Вот как выглядит переменная, которой присвоен объект:

var user = {

name: "Вася"

};

 

Внимание: объект – вне переменной. В переменной – лишь «адрес» (ссылка) для него.


Поделиться с друзьями:

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.