Skip to content

Object.create

garevna edited this page Dec 9, 2018 · 12 revisions

🎓 Статические методы конструктора Object


Этот метод использовался для доступа к прототипу объекта до того, как в спецификации 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
    }
})
☕ 3️⃣

Создадим экземпляр объекта 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 )

Посмотрим результат в консоли:

☕ 4️⃣
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 скопирован полностью

☕ 5️⃣

Объявим конструктор класса 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


🔘 Object.freeze()
🔘 Object.getOwnPropertySymbols()
🔘 Object.getPrototypeOf()
🔘 Object.is()
🔘 Object.isExtensible()
🔘 Object.isFrozen()
🔘 Object.isSealed()
🔘 Object.preventExtensions()
🔘 Object.seal()
🔘 Object.setPrototypeOf()

🔗 MDN

© Irina H.Fylyppova 2018
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав


Новая версия


1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19

Занятие 1

⤵️

Занятие 2

⤴️ ⤵️

Занятие 3

⤴️ ⤵️

Занятие 4

⤴️ ⤵️

Занятие 5

⤴️ ⤵️

Занятие 6

⤴️ ⤵️

Занятие 7

⤴️ ⤵️

Занятие 8

⤴️ ⤵️

Занятие 9

⤴️ ⤵️

Занятие 10

⤴️ ⤵️

Занятие 11

⤴️ ⤵️

Занятие 12

⤴️ ⤵️

Занятие 13

⤴️ ⤵️

Занятие 14

⤴️ ⤵️

Занятие 15

⤴️ ⤵️

Занятие 16

⤴️ ⤵️

Занятие 17

⤴️ ⤵️

Занятие 18

⤴️ ⤵️

Занятие 19

⤴️ ⤵️

⤴️

ico20 Дополнительно
dir-20 Справочная инфо

Clone this wiki locally