Skip to content

inheritance model

garevna edited this page Sep 23, 2018 · 26 revisions

🎓 Модель наследования в JS

⤵️
▶️ Литерал объекта ▶️ Конструктор
        ▶️ Собственные свойства
        ▶️ Перечислимые свойства

🎓 Литерал объекта

⤴️ ⤵️

В литеральной нотации объект описывается внутри блока фигурных скобок:

var figure = {
        type: "Окружность",
        size: 100,
        color: "red"
}

Все эти свойства доступны извне:

console.log ( figure.type )
console.log ( figure.size )
console.log ( figure.color )

или так:

console.log ( figure [ "type" ] )
console.log ( figure [ "size" ] )
console.log ( figure [ "color" ] )

⚠️ Свойства объектов, заданных литералом, являются публичными, поскольку они доступны извне

Хотя всегда есть ☕ способ это обойти 😉

🎓 Собственные свойства экземпляра

⤴️ ⤵️

Собственные свойства инкапсулированы в экземпляре

Например, экземпляр figure выступает в роли "капсюлы", в которой свойства type, size и color отделены от таких же свойств других экземпляров

Можно создать объект figure2 с таким же набором свойств, но с другими значениями этих свойств:

var figure2 = {
        type: "Треугольник",
        size: 150,
        color: "blue"
}

У экземпляров figure и figure2 одинаковый набор свойств ( имена свойств совпадают )

Однако значения этих свойств в каждом экземпляре отличаются

Итак, собственные свойства экземпляра - это свойства, инкапсюлированные в этом экземпляре

( свойства type, size и color являются собственными свойствами экземпляров figure и figure2 потому, что их значения локализованы внутри "капсюлы" под именем экземпляра )

figure.type       // "Окружность"
figure2.type      // "Треугольник"

🎓 Перечислимые свойства экземпляра

⤴️ ⤵️

Перечислимые свойства экземпляра - это свойства, которые итерируются оператором цикла for...in

  • ⚠️ По умолчанию свойства нативных объектов, создаваемых в процессе выполнения кода, являются перечислимыми
  • ⚠️ Свойства встроенных нативных объектов являются неперечислимыми
for ( var x in figure )
     console.log ( x )

В консоль будут выведены

type
size
color

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

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

  • Приватные свойства можно создать с помощью конструктора
  • Несобственные свойства - это унаследованные свойства
  • Что касается создания неперечислимых свойств - мы еще вернемся к этой теме далее

🎓 Публичные и приватные свойства и методы экземпляров

⤴️ ⤵️

🔳 Все свойства, объявленные в конструкторе с ключевым словом this, будут публичными ( name, age, changeName )

🔳 Все свойства, объявленные в конструкторе с ключевым словом var или function, будут приватными ( defaultName, showName )

приватные свойства ( и методы ) экземпляра недоступны извне

var  Girl = function ( name, age ) {

    var defaultName = "Jane"

    this.name = name || defaultName
    this.age = age || 25

    function showName ( name ) {
        console.log ( `Меня зовут ${ name }` )
    }

    this.changeName = function ( newName ) {
        this.name = newName
        showName ( this.name )
    }
}

В публичных методах экземпляра this будет ссылкой на контект вызова ( экземпляр, в контексте которого вызван метод )

var lena = new Girl ( "Лена", 18 )
lena.changeName

⚠️ в приватных методах экземпляра контекстом вызова будет глобальный объект window

( т.е. внутри метода showName this будет ссылкой на объект window )

var girls = []

girls [ 0 ] = new Girl ( "Лена", 18 )
girls [ 1 ] = new Girl ( "Марина", 20 )

🎓 Object

⤴️ ⤵️

Прототипом всех создаваемых нативных объектов является встроенный объект Object ( конструктор )

У конструктора Object есть свойство prototype

Это "генокод" всех создаваемых объектов JS

Он передается им при "рождении"

Все свойства и методы, перечисленные в свойстве prototype объекта Object, будут доступны в каждом экземпляре создаваемого нативного объекта JS

var obj = {}

obj.valueOf ()
obj.toString ()

⤴️

💼 Упражнения


🔗 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