Skip to content

public and private properties

garevna edited this page Sep 23, 2018 · 3 revisions

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

Конструктор - это функция, из чего следует, что с помощью конструктора можно "спрятать" переменные и функции

где спрятать?

в экземпляре, созданном с помощью этого конструктора

Как мы уже знаем, конструктор создает собственные свойства и методы экземпляров путем объявления переменных и функций

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

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

К публичным свойствам и методам экземпляра всегда есть доступ из внешнего окружения

Достаточно использовать имя экземпляра + "." + имя свойства ( метода )

  • при вызове метода нужно еще добавить круглые скобки после его имени

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

Они не отображаются в консоли при выводе объекта

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 )
    }
}

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

В этом примере defaultName и showName являются приватными свойствами экземпляра lena

name, age и changeName являются публичными свойствами экземпляра lena

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

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

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

var girls = []

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

☕ 2

var Bag = function ( keyword ) {
   var money = 3000
   //var keyword = key
   var documents = [
       "Паспорт",
       "Водительские права",
       "Диплом ВУЗа"
   ]
   var accessories = [
       "Ключи",
       "Билеты в кино",
       "Лекарство"
   ]
   this.content = null
   function getMoney ( sum ) {
       money -= sum
   }
   this.payment = function ( sum ) {
       if ( prompt ( "ты кто?" ) !== keyword ) return "⛔️"
       getMoney ( sum )
       console.info ( 
          `Осталось денег в кошельке:
           ${money} грн` 
       )
       return `Уплачено: ${sum} грн`
   }

   this.rummage = function () {
       this.content = [
           documents,
           accessories,
           money
       ]
       console.log ( 
          `Протокол обыска.
           Содержимое сумочки:
           ${ this.content }`
       )
   }
}

var myCase = new Bag ( 'это я, твоя хозяйка' )

Конструктор Bag создает объект с приватными свойствами money, documents и accessories

С его помощью создаем экземпляр myCase

При создании экземпляра передаем ему ключевую фразу для доступа к содержимому сумочки 'это я, твоя хозяйка'

Поскольку свойства money, documents и accessories приватные, "сумка закрыта"

Посторонним нет доступа к ее содержимому

Публичное свойство content изначально имеет значение null

Это все, что вы можете увидеть в закрытой сумке

Если хозяин сумки согласится показать ее содержимое, то оно будет помещено в публичное свойство content для обозрения

Функция getMoney () доступа к деньгам ( приватному свойству money ) также является приватной, поскольку никто, кроме хозяина, не должен иметь возможность взять деньги из сумки

И есть два публичных метода:

payment ( sum, key ) - оплата
rummage () - таможенный досмотр

В случае совершения платежа с помощью публичного метода payment

console.log ( myCase.payment ( 2000 ) )

запрашивается ключевая фраза, сверяется с установленной при создании экземпляра, и если значения совпали, то вызывается приватный метод getMoney, который уменьшает приватное свойство money на сумму платежа, после чего публичный метод pay () с чистой совестью возвращает изъятую сумму

Если будет введена неправильная ключевая фраза, то запрос будет отклонен с возвратом "⛔️"

В случае таможенного досмотра вызывается публичный метод rummage ()

myCase.rummage ()

который "выкладывает на обозрение" содержимое сумочки ( помещает его в публичное свойство content )

Теперь работники таможни могут посмотреть содержимое:

console.log ( myCase.content )

Таким образом, приватные и публичные свойства и методы помещаются в "капсулу" - объект ( экземпляр )

Это и есть инкапсуляция ( encapsultion )

Имена свойств и методов внутри "капсулы" принадлежат к пространству имен объекта

Мы агрегировали под одним именем ( именем объекта ) всю совокупность переменных и функций, определяющих и изменяющих его ( объекта ) состояние

© 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