Основи ООП Javascript.
Фронтенд розробка JavaScript. -> ООП. В javascript.
ОООП. У JavaScript.
Об’єктно-орієнтоване програмування (ООП) — це парадигма програмування, яка використовує абстракції для створення моделей, заснованих на об’єктах реального світу.
ООП використовує кілька технік з раніше визнаних парадигм, включаючи успадкування, поліморфізм та інкапсуляцію.
У JavaScript спочатку було застосовано прототипне програмування.
Прототипне програмування
Прототипне програмування — це модель ООП, яка не використовує класи, а натомість спочатку виконує поведінку класу і потім використовує його повторно (еквівалент успадкування в мовах на базі класів), декоруючи (або розширюючи) існуючі об’єкти прототипи.
Принцип ООП полягає в тому, щоб складати систему з об’єктів, які вирішують прості завдання, які складають складну програму. Об’єкт складається з приватних змінних станів та функцій (методів), які працюють із цими станами. У об’єктів є визначення себе (self, this) і поведінка, успадковане від креслення, тобто. класу (класове наслідування) або інших об’єктів (прототипне наслідування).
Спадкування – спосіб сказати, що ці об’єкти схожі на інші за винятком деяких деталей. Спадкування дозволяє прискорити розробку рахунок повторного використання коду.
Функція – конструктор.
Виконується з ключовим словом new і зазвичай починається з великої літери.
function test() {
this.name = 'Dima';
}
var me = new test();
При виклику з new створюється порожній об’єкт і в нього закидаються властивості з цього.
Створимо та експортуємо функцію в бібліотечному модулі.
export var Animal = function(name: string): void {
this.name = name;
this.show = function() {
console.log('Drawing object..');
};
}
Використання у клієнтському коді.
import { Animal } from "./lib";
var animal = new Animal('Muhtar');
console.log(animal);
animal.show();
Ми можемо визначити метод у прототипі функції, при цьому буде заощаджуватися пам’ять при успадкування.
export var Animal = function(name: string): void {
this.name = name;
}
Animal.prototype.show = function() {
console.log('Drawing object..');
}
JS використовує дифіренційно успадкування, при якому методи не копіюються від батьків до нащадків, а натомість передається посилання на метод і нащадки мають приховане посилання на методи батьків.
Якщо тепер створити об’єкт animal.
var animal = new Animal('dog');
То об’єкт не матиме власного методу show.
animal.hasOwnProperty('show') === false
І коли ми звертаємося до якості, якої в об’єкті немає, то JS починає його шукати в ланцюжку прототипів (у батька).
Створення конструктора - спадкоємця. Метод Object.create()
При виклик такого методу.
var parent = {
foo: function() {
console.log(‘bar’);
}
};
var child = Object.create( parent );
child.hasOwnProperty(‘foo’); // false
child.foo(); // ‘bar’
Створюється новий порожній об’єкт і його прототип поміщається parent.
Таким чином ми можемо описати функцію-конструктор Dog з новими властивостями та перетягнувши властивості конструктора Animal.
export var Dog = function (name: string): void {
this.bite = function(){
console.log('Biting');
}
Animal.call(this,name);
}
А потім зв’язати їх за прототипом.
Dog.prototype = Object.create(Animal.prototype);