Please enable JavaScript.
Coggle requires JavaScript to display documents.
Обьект (Методы обьектов - функции (Избежать дублирование кода, задав…
Обьект
Методы обьектов - функции
this
Определение методов обьекта
Стрелочная функция в методе и this
Избежать дублирование кода, задав обьект с общими методами
Заимствование метода. Вызвать от общего обьекта с помощью call
Для создания связи между обьектами есть специальное внутреннее поле [[Prototype]] Обьект на который указывает ссылка в [[Prototype]] называется прототипом
setPrototypeOf
Цикл в цепочке прототипов не работает
Object.setPrototypeOf(student, null); если хотим закончить нашу цепочку
Если попробуем передать в метод в качестве прототипа что то отличное от обьекта или значения null то будет ошибка TypeError: Object prototype may only be an
Object or null
Цепочка прототипов
Object.prototype
Общий прототип, содержит несколько общих методов
Object.prototype.hasOwnProperty() есть ли у конкретного обьекта конкретное поле
Array.prototype
прототип для массивов
Function.prototype
TypeError: Cyclic
proto
value
getPrototypeOf позволяет получить ссылку на прототип, передаем в него тот обьект для которого хотим получить ссылку на прототип и он ее возвращает
Метод сreate в отличии от set он сам создает обьекты. create быстрее, чем setPrototypeOf. рекомендуется использовать create
Ключевое слово
super
позволяет обратиться к методы прототипа.
Свойства полей
student.age = 21;
student['age'] = 21;
Метод чтобы установить поля обьекта Object.defineProperty
writeable - перезаписываемость
по умолчанию false
Неперезаписываемые поля и use strict интерпретатор выбросит ошибку при попытке перезаписать неперезаписываемое поле
Неперезаписываемые поля в прототипах
затенение не работает Ошибка: не можем в поле только для чтения присвоить новое значение
Неперезаписываемые поля, а не
неизменяемые
Можно добавит в value обьект и изменять его
value - начальное значение
Object.getOwnPropertyDescriptor(student, 'name'); позволяет получить текущие свойства определенного обьекта, вернет обьект с текущим значением этого поля и снабором хар-к
enumerable
: false, - перечисляемое или неперечисляемое
Перечисляемое. Отвечает за то что будет ли участвовать поле в перечислениях явно или не явно При for in перчисляем и обьекты прототипов. 3 способа получения только собственных полей обьекта:
hasOwnProperty выводит только собственные поля
keys возвращает масив собственных полей обьектов
entries возвращем массив пар, каждая пара массив в качестве первого элемента ключ в качестве второго значение
Неперчисляемое поле. Когда вызываем Object.defineProperty значение по умолчанию false. При перечислении значений ключей они не будут отображаться. 3 способа в примере
Неперечисляемые поля в прототипах
Неперечисляемые поля по умолчанию
getOwnPropertyNames в отличии от метода keys не учитывает перечисляемые или нет и возвращает все
set/get Важно положение геттера и ключа. геттер может быть андефайнд . Разные случаи при определении либо только геттера либо только сеттера
set/get в прототипах +
исключение для эффекта затенения
Поле одновременно может быть либо
нормальным либо геттером/сеттером Если есть хотя бы один из методов get или
set, то поле становится геттером/сеттером Либо set/get, либо writable/value
Нормальные поля
configurable
: false
можем ли удалять или не можем и можем ли менять абрибуты или не можем
configurable не контролирует изменение
атрибута writable
Эффект затенения полей
Метод Object.prototype.toString()
можно переопределить