-
Notifications
You must be signed in to change notification settings - Fork 16
public and private properties
Конструктор - это функция, из чего следует, что с помощью конструктора можно "спрятать" переменные и функции
где спрятать?
в экземпляре, созданном с помощью этого конструктора
Как мы уже знаем, конструктор создает собственные свойства и методы экземпляров путем объявления переменных и функций
🔳 Все свойства, объявленные в конструкторе с ключевым словом 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 |
| ⏬ |
|---|
- Блок-схема алгоритма
- 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
Коды символов