рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░

рдХрдИ рд╕реБрдЭрд╛рд╡ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрд▓реЗрдЦ V8 v7.2 рдФрд░ Chrome 72 рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реНрд░реЗрдгреА рдХреЗ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЖрдЧрд╛рдореА рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред


рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдмрдврд╝рддреЗ рд╡рд░реНрдЧ рдореБрдарднреЗрдбрд╝ рдХреЛ рддреБрд░рдВрдд рдмрддрд╛рддрд╛ рд╣реИ:


const counter = new IncreasingCounter(); counter.value; // logs 'Getting the current value!' // тЖТ 0 counter.increment(); counter.value; // logs 'Getting the current value!' // тЖТ 1 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХреНрд╕реЗрд╕ рдореВрд▓реНрдп рдХреБрдЫ рдХреЛрдб (рд▓реЙрдЧ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдкреВрдЫреЗрдВ: рдЖрдк рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?


ES2015 рдХреНрд▓рд╛рд╕реЗрд╕


рдиреАрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ ES2015 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирдХрд╛рдЙрдВрдЯрд░рд┐рдВрдЧ рд╡рд░реНрдЧ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 class IncreasingCounter { constructor() { this._count = 0; } get value() { console.log('Getting the current value!'); return this._count; } increment() { this._count++; } } 

рд╡рд░реНрдЧ рдПрдХ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ, рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ _count рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡реИрд▓реНрдпреВ рдХреЛ 0. рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣рдо рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ _count рдХреЛ рд╕реАрдзреЗ рдХреНрд▓рд╛рд╕ рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдХрдиреНрд╡реЗрдВрд╢рди рд╣реИ; рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╢рдмреНрджрд╛рд░реНрде рднрд╛рд╖рд╛ рдореЗрдВ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред


 const counter = new IncreasingCounter(); counter.value; // logs 'Getting the current value!' // тЖТ 0 // Nothing stops people from reading or messing with the // `_count` instance property. counter._count; // тЖТ 0 counter._count = 42; counter.value; // logs 'Getting the current value!' // тЖТ 42 

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреНрд▓рд╛рд╕ рдХрд░реЗрдВ


рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ:


 class IncreasingCounter { _count = 0; get value() { console.log('Getting the current value!'); return this._count; } increment() { this._count++; } } 

рд╡рд░реНрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ _count рд╕рдВрдкрддреНрддрд┐ рдЕрдм рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИред рд╣рдореЗрдВ рдЕрдм рдХреЗрд╡рд▓ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!


рд╣рд╛рд▓рд╛рдВрдХрд┐, _count рдЕрднреА рднреА рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдФрд░ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред


рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░


рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ # рдЪрд┐рд╣реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ # рдлрд╝реАрд▓реНрдб рдирд╛рдо рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:


 class IncreasingCounter { #count = 0; get value() { console.log('Getting the current value!'); return this.#count; } increment() { this.#count++; } } 

рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╡рд░реНрдЧ рдирд┐рдХрд╛рдп рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ:


 const counter = new IncreasingCounter(); counter.#count; // тЖТ SyntaxError counter.#count = 42; // тЖТ SyntaxError 

рд╕реНрдереИрддрд┐рдХ рдЧреБрдг


рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 class FakeMath { // `PI` is a static public property. static PI = 22 / 7; // Close enough. // `#totallyRandomNumber` is a static private property. static #totallyRandomNumber = 4; // `#computeRandomNumber` is a static private method. static #computeRandomNumber() { return FakeMath.#totallyRandomNumber; } // `random` is a static public method (ES2015 syntax) // that consumes `#computeRandomNumber`. static random() { console.log('I heard you like random numbersтАж') return FakeMath.#computeRandomNumber(); } } FakeMath.PI; // тЖТ 3.142857142857143 FakeMath.random(); // logs 'I heard you like random numbersтАж' // тЖТ 4 FakeMath.#totallyRandomNumber; // тЖТ SyntaxError FakeMath.#computeRandomNumber(); // тЖТ SyntaxError 

рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ


рдирдП рдлрд╝реАрд▓реНрдб рдлрд╝реАрд▓реНрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд╛рдн рддрдм рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╢реБ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ:


 class Animal { constructor(name) { this.name = name; } } 

рдмрд┐рд▓реНрд▓реА рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реБрдкрд░ () рдХреЛ рдПрдирд┐рдорд▓ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдерд╛:


 class Cat extends Animal { constructor(name) { super(name); this.likesBaths = false; } meow() { console.log('Meow!'); } } 

рд╡рд╣рд╛рдБ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдХрд┐ рдмрд┐рд▓реНрд▓рд┐рдпрд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдирд╛рди рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдирдпрд╛ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╕реБрдкрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЬреАрдм рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:


 class Cat extends Animal { likesBaths = false; meow() { console.log('Meow!'); } } 

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб V8 v7.2 рдФрд░ Chrome 72 рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЬрд▓реНрдж рд╣реА рдирд┐рдЬреА рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред

Source: https://habr.com/ru/post/hi438202/


All Articles