Свойства объекта и их конфигурация Flashcards

1
Q

Что такое флаги свойств объектов?

A

Флаги свойств объектов – это дополнительные свойства, которые определяют особенности поведения и хранения значения самого свойства объекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие флаги доступны для свойств объектов?

A

Для свойств объектов доступны три флага: writable, enumerable и configurable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что означает флаг writable?

A

Флаг writable определяет, можно ли изменять значение свойства объекта. Если значение этого флага равно true, то свойство можно изменять, если false – то свойство доступно только для чтения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что означает флаг enumerable?

A

Флаг enumerable определяет, будет ли свойство объекта перечислено в циклах. Если значение этого флага равно true, то свойство будет перечислено в циклах, если false – то свойство будет игнорироваться циклами.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что означает флаг configurable?

A

Флаг configurable определяет, можно ли изменять или удалять свойство объекта. Если значение этого флага равно true, то свойство можно изменять и удалять, если false – то свойство нельзя удалить и изменять флаги writable, enumerable и configurable уже нельзя.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что делает метод Object.getOwnPropertyDescriptor?

A

Метод Object.getOwnPropertyDescriptor позволяет получить дескриптор свойства объекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Каким образом можно получить дескриптор свойства объекта?

A

Для получения дескриптора свойства объекта можно использовать метод Object.getOwnPropertyDescriptor, передав в качестве аргументов объект и имя свойства.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что содержит дескриптор свойства объекта?

A

Дескриптор свойства объекта содержит значение свойства и его флаги (writable, enumerable и configurable).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Какие флаги будут присвоены свойству, если в методе Object.defineProperty не указаны никакие флаги явно?

A

Если в методе Object.defineProperty не указаны никакие флаги явно, то всем флагам (writable, enumerable, configurable) будет присвоено значение false.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Как изменить флаг writable свойства на true?

A

Для изменения флага writable на true необходимо вызвать метод Object.defineProperty() с дескриптором, содержащим ключ writable со значением true. Например:
let user = { name: “John” };
Object.defineProperty(user, “name”, {
writable: true
});

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Как сделать так, чтобы нельзя было изменять свойство объекта?

A

С помощью Object,defineProperty():
let user = {
name: “John”
};
Object.defineProperty(user, “name”, {
writable: false
});
user.name = “Pete”; // Ошибка: Невозможно изменить доступное только для чтения свойство ‘name’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Какие ошибки возникнут при попытке изменить свойство с флагом writable и configurable со значением false в строгом режиме?

A

При попытке изменить свойство с флагом writable и configurable со значением false в строгом режиме возникнет ошибка. Если же строгий режим не включен, то интерпретатор будет действовать согласно флагам, но ошибок не будет.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как можно сделать метод объекта неперечисляемым?

A

Чтобы сделать метод объекта неперечисляемым, необходимо присвоить флагу enumerable значение false при помощи метода Object.defineProperty().

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что происходит, если свойство имеет флаг configurable: false?

A

Если свойство имеет флаг configurable: false, то нельзя изменить флаг конфигурации (configurable) и все остальные флаги (writable, enumerable). Свойство также нельзя удалить.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Какие флаги имеет свойство Math.PI?

A

Свойство Math.PI имеет флаги: значение (value) – 3.141592653589793, записываемость (writable) – false, перечисляемость (enumerable) – false и конфигурируемость (configurable) – false.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что делает метод Object.defineProperties и как его использовать?

A

Метод Object.defineProperties позволяет определить множество свойств с их дескрипторами в объекте. Для этого нужно передать первым аргументом объект, в котором нужно определить свойства, а вторым аргументом объект, свойства которого являются именами свойств для определения их дескрипторов.

17
Q

Как можно получить дескрипторы всех свойств объекта?

A

Для получения дескрипторов всех свойств объекта можно использовать метод Object.getOwnPropertyDescriptors, который возвращает объект с дескрипторами всех свойств объекта.

18
Q

Как можно скопировать объект вместе с его флагами?

A

Для клонирования объекта вместе с его флагами можно использовать метод Object.defineProperties, передав первым аргументом пустой объект, а вторым аргументом результат вызова метода Object.getOwnPropertyDescriptors с клонируемым объектом в качестве аргумента.

19
Q

Какие отличия между методом Object.getOwnPropertyDescriptors и циклом for..in?

A

Метод Object.getOwnPropertyDescriptors возвращает дескрипторы всех свойств объекта, включая неперечисляемые и символьные свойства, в то время как цикл for..in игнорирует эти свойства. Кроме того, при клонировании объекта с помощью цикла for..in не будут скопированы флаги свойств.

20
Q

Какие методы позволяют ограничить доступ ко всему объекту?

A

Методы Object.preventExtensions(obj), Object.seal(obj), Object.freeze(obj). На практике используются редко.

21
Q

Какой метод позволяет проверить, разрешено ли добавление свойств в объект?

A

Метод Object.isExtensible(obj). На практике используется редко.

22
Q

Какой метод возвращает true, если добавление/удаление свойств запрещено и для всех существующих свойств установлено configurable: false?

A

Метод Object.isSealed(obj). На практике используется редко.

23
Q

Какой метод запрещает добавлять/удалять/изменять свойства и устанавливает configurable: false, writable: false для всех существующих свойств?

A

Метод Object.freeze(obj). На практике используется редко.

24
Q

Что такое свойства-аксессоры?

A

Свойства-аксессоры (свойства доступа) - это функции, которые используются для присвоения и получения значения свойства. В их дескрипторе отсутствуют value и флаг writable.

25
Q

Какие поля содержит дескриптор свойств-аксессоров?

A

Дескриптор свойств-аксессоров содержит поля: get - функция без аргументов, которая сработает при чтении свойства, set - функция, принимающая один аргумент, вызываемая при присвоении свойства, а также стандартные поля enumerable и configurable.

26
Q

Что такое геттер и сеттер?

A

Геттер (get) и сеттер (set) - это функции, которые используются в свойствах-аксессорах для получения и установки значения свойства соответственно. При чтении свойства вызывается геттер, а при записи - сеттер.

27
Q

Какие ключевые слова используются при объявлении геттеров и сеттеров при литеральном объявлении объекта?

A

Для объявления геттеров и сеттеров при литеральном объявлении объекта используются ключевые слова get и set соответственно.

28
Q

Что происходит при чтении свойства, у которого определен геттер?

A

При чтении свойства, у которого определен геттер, срабатывает соответствующая функция-геттер.

29
Q

Что происходит при присвоении значения свойству, у которого определен сеттер?

A

При присвоении значения свойству, у которого определен сеттер, срабатывает соответствующая функция-сеттер, которая получает новое значение и может выполнить определенные действия с объектом или его свойствами.

30
Q

Какие дескрипторы свойств доступа могут использоваться при создании свойств-аксессоров?

A

Дескрипторы свойств доступа, используемые при создании свойств-аксессоров, включают в себя get, set, enumerable и configurable.

31
Q

Может ли свойство объекта быть одновременно свойством-данным и свойством-аксессором?

A

Нет, свойство объекта может быть либо свойством-данным (с value), либо свойством-аксессором (с get/set).

32
Q

Что произойдет, если попытаться указать value и get в одном дескрипторе?

A

Если попытаться указать value и get в одном дескрипторе, возникнет ошибка “Invalid property descriptor”.

33
Q

Каким образом можно использовать геттер и сеттер для свойства объекта?

A

Для использования геттера и сеттера для свойства объекта нужно объявить свойства с помощью ключевых слов get и set. Внутри геттера и сеттера можно указать необходимую логику. При этом, геттер вызывается при обращении к свойству объекта, а сеттер вызывается при присваивании значения свойству.

34
Q

Что такое умные геттеры/сеттеры и для чего они используются?

A

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

35
Q

Как реализовать умные геттеры/сеттеры для свойства name объекта user?

A

let user = {
get name() { return this._name; },
set name(value) {
if (value.length < 4) {
alert(“Имя слишком короткое, должно быть более 4 символов”);
return;
}
this._name = value;
}
};

36
Q

Какие возможности предоставляет использование геттеров и сеттеров для совместимости в объектах JavaScript?

A

Использование геттеров и сеттеров для совместимости в объектах JavaScript позволяет изменять поведение существующих свойств объекта в любой момент времени без необходимости изменения кода, который использует эти свойства. Например, если имеется старый код, который использует свойство, которое нужно удалить или изменить, можно создать геттер или сеттер для этого свойства, чтобы предоставить доступ к новым свойствам или измененному поведению без необходимости изменения старого кода.