-
Notifications
You must be signed in to change notification settings - Fork 16
Object.create
Этот метод использовался для доступа к прототипу объекта до того, как в спецификации ES6 ( 2015 ) появилось свойство __proto__
Создает экземпляр объекта на основе прототипа
Методу нужно передать в качестве первого аргумента ссылку на прототип, который будет использован при создании экземпляра
Вторым ( опциональным ) аргументом может быть объект-дескриптор свойств создаваемого экземпляра
☕ 1️⃣
var figure = {
className: "Figure"
}
var circle = Object.create ( figure )Если передать null в качестве аргумента, будет создан объект без прототипа:
var emptyObject = Object.create ( null )Метод Object.create () позволяет задавать дескрипторы свойств объекта
( как это делает метод Object.defineProperty, который добавляет свойство в объект )
☕ 2️⃣
var circle = Object.create ( figure, {
x: {
value: undefined,
writable: true,
configurable: true,
enumerable: true
},
y: {
value: undefined,
writable: true,
configurable: true,
enumerable: true
},
radius: {
value: undefined,
writable: true,
configurable: true,
enumerable: true
}
})Создадим экземпляр объекта proto:
var proto = {
figure: "circle",
size: 100,
clip: false,
changeFigure: function ( newFigure ) {
this.figure = newFigure
}
}А теперь вызовем метод Object.create() для создания экземпляра obj:
var obj = Object.create ( proto )В консоли посмотрим на результат:
▼ {}
▼ __proto__:
► changeFigure: ƒ ( newFigure )
clip: false
figure: "circle"
size: 100
► __proto__: ObjectВсе свойства и методы объекта proto, взятого в качестве прототипа, стали унаследованными свойствами и методами экземпляра obj
Теперь создадим простой конструктор:
var Creator = function ( id, val ) {
this.id = id
this.val = val
}и вызовем его как обычную функцию, передав контекст нашего экземпляра obj:
Creator.call ( obj, "sample", 75 )Посмотрим результат в консоли:
var ppl = {
name: "Тимофей",
hobby: "футбол"
}Создадим прототипные свойства экземпляра ppl:
ppl.__proto__.age = 20
ppl.__proto__.job = "монтажник"
ppl.__proto__.showProps = function () {
console.log (
"Собственные свойства: ",
Object.keys ( this )
)
console.log (
"__proto__: ",
Object.keys ( this.__proto__ )
)
}А теперь воспользуемся методом Object.create() для создания нового экземпляра new_ppl:
var new_ppl = Object.create ( ppl.__proto__ )У экземпляра new_ppl нет собственных свойств
Но прототип экземпляра ppl скопирован полностью
Объявим конструктор класса SuperClass
function SuperClass () {
this.__proto__.type = "SuperClass"
this.__proto__.name = "Родительский класс"
}Теперь используем метод Object.create() для создания подкласса SubClass класса SuperClass
Для этого объявим конструктор подкласса SubClass:
function SubClass () {
SuperClass.call ( this )
this.name = "Дочерний класс"
this.type = "SubClass"
}Когда мы вызываем конструктор SuperClass в контексте SubClass
SuperClass.call ( this )мы передаем ему контекст объекта SubClass
© Irina H.Fylyppova 2018
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав
| 1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 |
| ⏬ |
|---|
- Блок-схема алгоритма
- Developer Tools
- Chrome DevTools
- Переменные
- Оператор typeof
- Структуры данных
- Операторы присваивания
- Логические выражения
- Условные операторы
- Инкремент
- Свойство length
- Оператор цикла for
- UTF-8
Homework
- Приведение типов
- NaN | null | Infinity
- BigInt (ES10)
- Функции
- Методы
- Методы строк
- Методы массивов
- Date ()
Самостоятельная работа
Практика (XSS)
Homework
- Циклы while и do...while
- Циклы for...of и for...in
- Параметры по умолчанию
- Объект function
Практика
Homework
- Нативные и host-объекты
- Литерал объекта
- Унаследованные свойства
- Конструктор
- Модель наследования
- Публичные и приватные свойства
- Оператор in
1
Homework
- Итерирующие методы массивов
- Тестирование производительности
- SHA
Homework
- Размеры и прокрутка элемента
- Event Loop
- async | await
- API
- REST | HATEOAS
- status codes
JSON placeholder-
JSON server
fake chat
Homework
- strict mode
- Вычисляемые имена свойств
- Краткий синтаксис методов
- Краткий литерал объекта
- Классы
Homework
- :not(:defined)
- Shadow DOM
- Custom elements
- Lifecycle hooks
- whenDefined
- <template>
- slot
1
2
3
Homework
- npm
- webpack
Упражнение 1- ES6 модули
Упражнение 2- --mode | --watch
Упражнение 3
Упражнение 4
Упражнение 5
Упражнение 6
Упражнение 7
Упражнение 8
Homework
| ⏫ |
|---|

Дополнительно
Справочная инфо
Git Bush
TCP/IP
Коды символов