РобâÑкÑно-оÑÑÑнÑÐ¾Ð²Ð°Ð½Ð¾Ð¼Ñ Ð¿ÑогÑамÑваннÑ, ÐºÐ»Ð°Ñ â Ñе ÑпеÑÑалÑна конÑÑÑÑкÑÑÑ, Ñка викоÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ Ð³ÑÑпÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²âÑÐ·Ð°Ð½Ð¸Ñ Ð·Ð¼ÑÐ½Ð½Ð¸Ñ Ñа ÑÑнкÑÑй. ÐÑи ÑÑомÑ, згÑдно з ÑеÑмÑнологÑÑÑ ÐÐÐ, глобалÑÐ½Ñ Ð·Ð¼ÑÐ½Ð½Ñ ÐºÐ»Ð°ÑÑ (Ñлени-змÑннÑ) називаÑÑÑÑÑ Ð¿Ð¾Ð»Ñми Ð´Ð°Ð½Ð¸Ñ (Ñакож влаÑÑивоÑÑÑми або аÑÑибÑÑами), а Ñлени-ÑÑнкÑÑÑ Ð½Ð°Ð·Ð¸Ð²Ð°ÑÑÑ Ð¼ÐµÑодами клаÑÑ.
Ðа пÑакÑиÑÑ Ð¼Ð¸ ÑаÑÑо Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ ÑÑвоÑÑваÑи багаÑо обâÑкÑÑв одного й Ñого ж видÑ, напÑиклад коÑиÑÑÑваÑÑв, або ÑоваÑи Ñи Ñо завгодно.
Як ми вже знаÑмо з ÑоздÑÐ»Ñ ÐонÑÑÑÑкÑоÑи, опеÑаÑÐ¾Ñ "new", new function може допомогÑи з Ñим.
Ðле в ÑÑÑаÑÐ½Ð¾Ð¼Ñ JavaScript ÑÑнÑÑ Ð±ÑлÑÑ Ð¿ÑоÑÑнÑÑа конÑÑÑÑкÑÑÑ âклаÑâ, Ñка вводиÑÑ Ð½Ð¾Ð²Ñ ÑÑÐ´Ð¾Ð²Ñ ÑÑнкÑÑÑ, ÑÐºÑ ÐºÐ¾ÑиÑÐ½Ñ Ð´Ð»Ñ Ð¾Ð±âÑкÑно-оÑÑÑнÑованого пÑогÑамÑваннÑ.
СинÑакÑÐ¸Ñ âclassâ
Ðазовий ÑинÑакÑиÑ:
class MyClass {
// меÑоди клаÑÑ
constructor() { ... }
method1() { ... }
method2() { ... }
method3() { ... }
...
}
ÐоÑÑм викоÑиÑÑовÑйÑе new MyClass(), Ñоб ÑÑвоÑиÑи новий обâÑÐºÑ Ð· ÑÑÑма пеÑеÑаÑ
ованими меÑодами.
ÐеÑод constructor() викликаÑÑÑÑÑ Ð°Ð²ÑомаÑиÑно за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ new, в нÑÐ¾Ð¼Ñ Ð¼Ð¸ можемо ÑнÑÑÑалÑзÑваÑи обâÑкÑ.
ÐапÑиклад:
class User {
constructor(name) {
this.name = name;
}
sayHi() {
alert(this.name);
}
}
// ÐикоÑиÑÑаннÑ:
let user = new User("Ðван");
user.sayHi();
Ðоли new User("Ðван") викликаÑÑÑÑÑ:
- СÑвоÑÑÑÑÑÑÑ Ð½Ð¾Ð²Ð¸Ð¹ обâÑкÑ.
constructorзапÑÑкаÑÑÑÑÑ Ð· даним аÑгÑменÑом Ñ Ð¿ÑиÑвоÑÑ Ð¹Ð¾Ð³Ð¾ вthis.name.
â¦ÐоÑÑм ми можемо викликаÑи меÑоди обâÑкÑÑ, ÑÐ°ÐºÑ Ñк user.sayHi().
ЧаÑÑа помилка ÑозÑобникÑв-поÑаÑкÑвÑÑв полÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо ÑÑавлÑÑÑÑÑ ÐºÐ¾Ð¼Ð¸ мÑж меÑодами клаÑÑ, Ñо пÑизводиÑÑ Ð´Ð¾ ÑинÑакÑиÑÐ½Ð¾Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸.
СинÑакÑÐ¸Ñ ÐºÐ»Ð°ÑÑв не ÑлÑд плÑÑаÑи з лÑÑеÑалами обâÑкÑÑв. У Ð¼ÐµÐ¶Ð°Ñ ÐºÐ»Ð°ÑÑ Ð½Ðµ ÑÑеба ÑÑавиÑи комÑ.
Що Ñаке клаÑ?
ÐÑже, Ñим наÑпÑÐ°Ð²Ð´Ñ Ñ class? ÐÑн не Ñ ÑÑлком Ð½Ð¾Ð²Ð¾Ñ ÑÑÑнÑÑÑÑ Ð¼Ð¾Ð²Ð¸ пÑогÑамÑваннÑ, Ñк можна подÑмаÑи.
Тож, ÑозвÑймо магÑÑ Ñ Ð¿Ð¾Ð´Ð¸Ð²ÑмоÑÑ, Ñим в дÑйÑноÑÑÑ Ñ ÐºÐ»Ð°Ñ. Це допоможе в ÑозÑмÑÐ½Ð½Ñ Ð±Ð°Ð³Ð°ÑÑÐ¾Ñ ÑÐºÐ»Ð°Ð´Ð½Ð¸Ñ Ð°ÑпекÑÑв.
У JavaScript ÐºÐ»Ð°Ñ Ñ ÑвоÑÑÑÐ´Ð½Ð¾Ñ ÑÑнкÑÑÑÑ.
ÐоглÑнÑÑе на Ñе:
class User {
constructor(name) { this.name = name; }
sayHi() { alert(this.name); }
}
// доказ: User -- Ñе ÑÑнкÑÑÑ
alert(typeof User); // function
ÐонÑÑÑÑкÑÑÑ class User {...} в дÑйÑноÑÑÑ ÑобиÑÑ Ð½Ð°ÑÑÑпне:
- СÑвоÑÑÑ ÑÑнкÑÑÑ, Ñо називаÑÑÑÑÑ
UserÑа ÑÑÐ°Ñ ÑезÑлÑÑаÑом оголоÑÐµÐ½Ð½Ñ ÐºÐ»Ð°ÑÑ. Ðод ÑÑÑÑ ÑÑнкÑÑÑ Ð±ÐµÑеÑÑÑÑ Ð· меÑодÑconstructor(вважаÑÑÑÑÑ Ð¿Ð¾ÑожнÑм, ÑкÑо ми не напиÑали Ñакий меÑод). - ÐапиÑÑÑ Ð¼ÐµÑоди клаÑÑ, ÑÐ°ÐºÑ Ñк
sayHi, доUser.prototype.
ÐÑÑÐ»Ñ Ñого, Ñк new User ÑÑвоÑивÑÑ, коли ми викликаÑмо його меÑод, вÑн беÑеÑÑÑÑ Ð· пÑоÑоÑипÑ, Ñк опиÑано в ÑоздÑÐ»Ñ F.prototype. Таким Ñином, обâÑÐºÑ Ð¼Ð°Ñ Ð´Ð¾ÑÑÑп до меÑодÑв клаÑÑ.
Ðи можемо пÑоÑлÑÑÑÑÑваÑи ÑезÑлÑÑÐ°Ñ Ð¾Ð³Ð¾Ð»Ð¾ÑÐµÐ½Ð½Ñ class User наÑÑÑпним Ñином:
ÐÑÑ ÐºÐ¾Ð´, Ñоб пÑоаналÑзÑваÑи Ñе:
class User {
constructor(name) { this.name = name; }
sayHi() { alert(this.name); }
}
// ÐºÐ»Ð°Ñ -- Ñе ÑÑнкÑÑÑ
alert(typeof User); // function
// ...або, ÑоÑнÑÑе, меÑод конÑÑÑÑкÑоÑа
alert(User === User.prototype.constructor); // true
// ÐеÑоди знаÑ
одÑÑÑÑÑ Ð² User.prototype, напÑиклад:
alert(User.prototype.sayHi); // код sayHi меÑодÑ
// Ñ Ð¿ÑоÑоÑÐ¸Ð¿Ñ ÑÑнÑÑ ÑÑвно два меÑоди
alert(Object.getOwnPropertyNames(User.prototype)); // constructor, sayHi
Ðе пÑоÑÑо ÑинÑакÑиÑний ÑÑкоÑ
ÐÐ½Ð¾Ð´Ñ Ð»Ñди кажÑÑÑ, Ñо class â Ñе âÑинÑакÑиÑний ÑÑкоÑâ (ÑинÑакÑиÑ, Ñкий пÑизнаÑений Ð´Ð»Ñ Ñого, Ñоб полегÑиÑи ÑиÑаннÑ, але не Ð´Ð¾Ð´Ð°Ñ Ð½ÑÑого нового), ÑÐ¾Ð¼Ñ Ñо ÑакÑиÑно ми могли б оголоÑиÑи Ñе Ñаме без викоÑиÑÑÐ°Ð½Ð½Ñ ÐºÐ»ÑÑового Ñлова class:
// пеÑепиÑемо ÐºÐ»Ð°Ñ User в ÑиÑÑиÑ
ÑÑнкÑÑÑÑ
// 1. СÑвоÑимо ÑÑнкÑÑÑ-конÑÑÑÑкÑоÑ
function User(name) {
this.name = name;
}
// пÑоÑоÑип ÑÑнкÑÑÑ Ð¼Ð°Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ "constructor" за замовÑÑваннÑм,
// ÑÐ¾Ð¼Ñ Ð½Ð°Ð¼ не поÑÑÑбно ÑÑ ÑÑвоÑÑваÑи
// 2. Ðодамо меÑод до пÑоÑоÑипÑ
User.prototype.sayHi = function() {
alert(this.name);
};
// ÐикоÑиÑÑаннÑ:
let user = new User("Ðван");
user.sayHi();
РезÑлÑÑÐ°Ñ ÑÑого оголоÑÐµÐ½Ð½Ñ Ð´Ñже ÑÑ
ожий. ÐÑже, дÑйÑно ÑÑнÑÑÑÑ Ð¿ÑиÑини, ÑÐ¾Ð¼Ñ class можна вважаÑи ÑинÑакÑиÑним ÑÑкÑом Ð´Ð»Ñ Ñого, Ñоб визнаÑиÑи конÑÑÑÑкÑÐ¾Ñ Ñазом Ñз його меÑодами пÑоÑоÑипÑ.
ÐÑоÑе, ÑÑнÑÑÑÑ Ð²Ð°Ð¶Ð»Ð¸Ð²Ñ Ð²ÑдмÑнноÑÑÑ.
-
Ðо-пеÑÑе, ÑÑнкÑÑÑ, Ñо ÑÑвоÑена за допомогоÑ
class, познаÑена ÑпеÑÑалÑÐ½Ð¾Ñ Ð²Ð½ÑÑÑÑÑнÑÐ¾Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ[[IsClassConstructor]]: true. Так Ñо Ñе не зовÑÑм Ñе Ñаме, Ñо ÑÑвоÑиÑи ÑÑ Ð²ÑÑÑнÑ.Ð ÑÑÑй пеÑевÑÑÑÑ ÑÑ Ð²Ð»Ð°ÑÑивÑÑÑÑ Ñ ÑÑÐ·Ð½Ð¸Ñ Ð¼ÑÑÑÑÑ . ÐапÑиклад, на вÑдмÑÐ½Ñ Ð²Ñд звиÑÐ°Ð¹Ð½Ð¾Ñ ÑÑнкÑÑÑ, ÑÑ ÑÑеба викликаÑи з
new:class User { constructor() {} } alert(typeof User); // function User(); // Ðомилка: ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑ User неможливо викликаÑи без 'new'Також, ÑÑдкове пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑа клаÑÑ Ñ Ð±ÑлÑÑоÑÑÑ ÑÑÑÑÑв JavaScript поÑинаÑÑÑÑÑ Ð· âclassâ¦â
class User { constructor() {} } alert(User); // class User { ... }Рй ÑнÑÑ Ð²ÑдмÑнноÑÑÑ, ми побаÑимо ÑÑ Ð½Ð°Ð¹Ð±Ð»Ð¸Ð¶Ñим ÑаÑом.
-
ÐеÑоди клаÑÑ Ð½ÐµÐ¿ÐµÑелÑÑÑванÑ. ÐголоÑÐµÐ½Ð½Ñ ÐºÐ»Ð°ÑÑ Ð²ÑÑановлÑÑ Ð¿ÑапоÑ
enumerableÑfalseÐ´Ð»Ñ Ð²ÑÑÑ Ð¼ÐµÑодÑв в"prototype".Це добÑе ÑомÑ, Ñо коли ми пеÑебиÑаÑмо обâÑÐºÑ Ð·Ð° допомогоÑ
for..in, ми зазвиÑай не Ñ Ð¾Ñемо обÑоблÑÑи меÑоди клаÑÑ. -
ÐÐ»Ð°Ñ Ð·Ð°Ð²Ð¶Ð´Ð¸
use strict. ÐеÑÑ ÐºÐ¾Ð´ вÑеÑÐµÐ´Ð¸Ð½Ñ ÐºÐ¾Ð½ÑÑÑÑкÑÑÑ ÐºÐ»Ð°ÑÑ Ð°Ð²ÑомаÑиÑно Ð·Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð² ÑÑвоÑÐ¾Ð¼Ñ ÑежимÑ.
ÐÑÑм Ñого, ÑинÑакÑÐ¸Ñ class пÑиноÑиÑÑ Ð±Ð°Ð³Ð°Ñо ÑнÑиÑ
оÑобливоÑÑей, ÑÐºÑ Ð¼Ð¸ доÑлÑдимо пÑзнÑÑе.
Class Expression
Так Ñамо, Ñк ÑÑнкÑÑÑ, клаÑи можÑÑÑ Ð±ÑÑи визнаÑÐµÐ½Ñ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ ÑнÑого виÑазÑ, пеÑеданÑ, повеÑнÑÑÑ, пÑиÑвоÑÐ½Ñ ÑоÑо.
ÐÑÑ Ð¿Ñиклад class expression:
let User = class {
sayHi() {
alert("ÐÑивÑÑ");
}
};
ÐодÑбно до Named Function Expression, Class Expression може маÑи назвÑ.
ЯкÑо Class Expression Ð¼Ð°Ñ Ð½Ð°Ð·Ð²Ñ, Ñо ÑÑ Ð²Ð¸Ð´Ð½Ð¾ лиÑе вÑеÑÐµÐ´Ð¸Ð½Ñ ÐºÐ»Ð°ÑÑ:
// "Named Class Expression"
// (Ð½ÐµÐ¼Ð°Ñ Ñакого ÑеÑмÑÐ½Ñ Ñ ÑпеÑиÑÑкаÑÑÑ, але Ñе ÑÑ
оже на Named Function Expression)
let User = class MyClass {
sayHi() {
alert(MyClass); // Ð½Ð°Ð·Ð²Ñ MyClass видно ÑÑлÑки вÑеÑÐµÐ´Ð¸Ð½Ñ ÐºÐ»Ð°ÑÑ
}
};
new User().sayHi(); // пÑаÑÑÑ, показÑÑ Ð²Ð¸Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ MyClass
alert(MyClass); // помилка, Ð½Ð°Ð·Ð²Ñ MyClass не видно за межами клаÑÑ
Ðи можемо навÑÑÑ Ð·ÑобиÑи клаÑи динамÑÑними âна вимогÑâ, напÑиклад:
function makeClass(phrase) {
// оголоÑÑÑмо ÐºÐ»Ð°Ñ Ñ Ð¿Ð¾Ð²ÐµÑÑаÑмо його
return class {
sayHi() {
alert(phrase);
}
};
}
// СÑвоÑÑÑмо новий клаÑ
let User = makeClass("ÐÑивÑÑ");
new User().sayHi(); // ÐÑивÑÑ
ÐеÑÑеÑи/ÑеÑÑеÑи
ÐодÑбно до лÑÑеÑалÑв обâÑкÑÑв, клаÑи можÑÑÑ Ð²ÐºÐ»ÑÑаÑи геÑÑеÑи/ÑеÑÑеÑи, обÑиÑÐ»ÐµÐ½Ñ Ð°ÑÑибÑÑи ÑоÑо.
ÐÑÑ Ð¿Ñиклад Ð´Ð»Ñ user.name, Ñо ÑеалÑзований за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ get/set:
class User {
constructor(name) {
// Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ ÑеÑÑеÑ
this.name = name;
}
get name() {
return this._name;
}
set name(value) {
if (value.length < 4) {
alert("ÐмâÑ Ð·Ð°Ð½Ð°Ð´Ñо коÑоÑке.");
return;
}
this._name = value;
}
}
let user = new User("Ðван");
alert(user.name); // Ðван
user = new User(""); // ÐмâÑ Ð·Ð°Ð½Ð°Ð´Ñо коÑоÑке.
ТеÑ
нÑÑно, Ñаке оголоÑÐµÐ½Ð½Ñ ÐºÐ»Ð°ÑÑ Ð¿ÑаÑÑÑ ÑлÑÑ
ом ÑÑвоÑÐµÐ½Ð½Ñ Ð³ÐµÑÑеÑÑв Ñа ÑеÑÑеÑÑв в User.prototype.
ÐбÑиÑÐ»ÐµÐ½Ñ Ð½Ð°Ð·Ð²Ð¸ [â¦]
ÐÑÑ Ð¿Ñиклад з обÑиÑÐ»ÐµÐ½Ð¾Ñ Ð½Ð°Ð·Ð²Ð¾Ñ Ð¼ÐµÑÐ¾Ð´Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ Ð´Ñжок [...]:
class User {
['say' + 'Hi']() {
alert("ÐÑивÑÑ");
}
}
new User().sayHi();
Ð¢Ð°ÐºÑ Ð¾ÑобливоÑÑÑ Ð»ÐµÐ³ÐºÐ¾ запамâÑÑаÑи, оÑкÑлÑки вони нагадÑÑÑÑ Ð»ÑÑеÑали обâÑкÑÑв.
ÐÐ¾Ð»Ñ ÐºÐ»Ð°ÑÑ
ÐÐ¾Ð»Ñ ÐºÐ»Ð°ÑÑ â Ñе Ð½ÐµÐ´Ð°Ð²Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ мови.
РанÑÑе наÑÑ ÐºÐ»Ð°Ñи мали лиÑе меÑоди.
âÐÐ¾Ð»Ñ ÐºÐ»Ð°ÑÑâ â Ñе ÑинÑакÑиÑ, Ñкий дозволÑÑ Ð´Ð¾Ð´Ð°Ð²Ð°Ñи бÑдÑ-ÑÐºÑ Ð²Ð»Ð°ÑÑивоÑÑÑ.
ÐапÑиклад, додаймо влаÑÑивÑÑÑÑ name до class User:
class User {
name = "Ðван";
sayHi() {
alert(`ÐÑивÑÑ, ${this.name}!`);
}
}
new User().sayHi(); // ÐÑивÑÑ, Ðван!
ÐÑже, ми пÑоÑÑо пиÑемо <property name> = <value> в оголоÑеннÑ, Ñ Ð²Ñе.
ÐÐ°Ð¶Ð»Ð¸Ð²Ð¾Ñ Ð²ÑдмÑннÑÑÑÑ Ð¿Ð¾Ð»Ñв клаÑÑ Ñ Ñе, Ñо вони задаÑÑÑÑÑ Ð² окÑемиÑ
обâÑкÑаÑ
, а не в User.prototype:
class User {
name = "Ðван";
}
let user = new User();
alert(user.name); // Ðван
alert(User.prototype.name); // undefined
Ðи Ñакож можемо пÑиÑвоÑÑи знаÑеннÑ, викоÑиÑÑовÑÑÑи ÑкладнÑÑÑ Ð²Ð¸Ñази Ñа виклики ÑÑнкÑÑй:
class User {
name = prompt("ÐмâÑ, бÑÐ´Ñ Ð»Ð°Ñка?", "Ðван");
}
let user = new User();
alert(user.name); // Ðван
СÑвоÑÐµÐ½Ð½Ñ Ð¼ÐµÑодÑв, Ñо повâÑÐ·Ð°Ð½Ñ Ð· полÑми клаÑÑ
Як показано в ÑоздÑÐ»Ñ ÐÑивâÑзка конÑекÑÑÑ Ð´Ð¾ ÑÑнкÑÑÑ, ÑÑнкÑÑÑ Ð² JavaScript маÑÑÑ Ð´Ð¸Ð½Ð°Ð¼ÑÑний this. ÐÑн залежиÑÑ Ð²Ñд конÑекÑÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ.
ÐÑже, ÑкÑо меÑод обâÑкÑа пеÑедаÑÑÑÑÑ Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°ÑÑÑÑÑ Ð² ÑнÑÐ¾Ð¼Ñ ÐºÐ¾Ð½ÑекÑÑÑ, this бÑлÑÑе не бÑде поÑиланнÑм на Ñей обâÑкÑ.
ÐапÑиклад, Ñей код покаже undefined:
class Button {
constructor(value) {
this.value = value;
}
click() {
alert(this.value);
}
}
let button = new Button("пÑивÑÑ");
setTimeout(button.click, 1000); // undefined
Ð¦Ñ Ð¿Ñоблема називаÑÑÑÑÑ âвÑÑаÑÐ¾Ñ thisâ.
ÐÑнÑÑ Ð´Ð²Ð° пÑÐ´Ñ Ð¾Ð´Ð¸ до ÑозвâÑÐ·Ð°Ð½Ð½Ñ ÑÑÑÑ Ð¿Ñоблеми, Ñк обговоÑÑвалоÑÑ Ð² ÑоздÑÐ»Ñ ÐÑивâÑзка конÑекÑÑÑ Ð´Ð¾ ÑÑнкÑÑÑ:
- ÐеÑедаÑи ÑÑнкÑÑÑ-обгоÑÑкÑ, напÑиклад
setTimeout(() => button.click(), 1000). - ÐвâÑзаÑи меÑод з обâÑкÑом за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑÑнкÑÑÑ
bind, напÑиклад Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑÑ.
ÐÐ¾Ð»Ñ ÐºÐ»Ð°ÑÑ Ð½Ð°Ð´Ð°ÑÑÑ ÑнÑий, доÑиÑÑ ÐµÐ»ÐµÐ³Ð°Ð½Ñний ÑинÑакÑиÑ:
class Button {
constructor(value) {
this.value = value;
}
click = () => {
alert(this.value);
}
}
let button = new Button("пÑивÑÑ");
setTimeout(button.click, 1000); // пÑивÑÑ
Ðоле клаÑÑ click = () => {...} ÑÑвоÑÑÑÑÑÑÑ Ð½Ð° оÑÐ½Ð¾Ð²Ñ ÐºÐ¾Ð½ÐºÑеÑного обâÑкÑа, ÑÑнÑÑ Ð¾ÐºÑема ÑÑнкÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ обâÑкÑа Button, з this вÑеÑÐµÐ´Ð¸Ð½Ñ Ð½ÐµÑ, Ñо поÑилаÑÑÑÑÑ Ð½Ð° Ñей обâÑкÑ. Ðи можемо пеÑедаÑи ÐºÐ½Ð¾Ð¿ÐºÑ ÐºÑди завгодно, а знаÑÐµÐ½Ð½Ñ this завжди бÑде коÑекÑним.
Це оÑобливо коÑиÑно в ÑеÑедовиÑÑ Ð±ÑаÑзеÑа, Ð´Ð»Ñ ÑлÑÑ Ð°ÑÑв подÑй.
ÐÑдÑÑмки
ÐÑновний ÑинÑакÑÐ¸Ñ ÐºÐ»Ð°ÑÑ Ð²Ð¸Ð³Ð»ÑÐ´Ð°Ñ Ñак:
class MyClass {
prop = value; // влаÑÑивÑÑÑÑ
constructor(...) { // конÑÑÑÑкÑоÑ
// ...
}
method(...) {} // меÑод
get something(...) {} // геÑÑÐµÑ Ð¼ÐµÑод
set something(...) {} // ÑеÑÑÐµÑ Ð¼ÐµÑод
[Symbol.iterator]() {} // меÑод з обÑиÑленим ÑмâÑм (Ñимволом в ÑÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ)
// ...
}
MyClass ÑеÑ
нÑÑно Ñ ÑÑнкÑÑÑÑ (ÑоÑ, ÑÐºÑ Ð¼Ð¸ задаÑмо Ñк constructor), ÑÐ¾Ð´Ñ Ñк меÑоди, геÑÑеÑи Ñа ÑеÑÑеÑи запиÑÑÑÑÑÑÑ Ð´Ð¾ MyClass.prototype.
У наÑÑÑÐ¿Ð½Ð¸Ñ ÑоздÑÐ»Ð°Ñ Ð¼Ð¸ дÑзнаÑмоÑÑ Ð±ÑлÑÑе пÑо клаÑи, вклÑÑаÑÑи наÑлÑдÑÐ²Ð°Ð½Ð½Ñ Ñа ÑнÑÑ Ð¾ÑобливоÑÑÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)