рд╣рдо рд╕рднреА рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╕реЗ рдЬреЗрдПрд╕ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЪрд╛рд╣рддреЗ рдереЗ, рдЬреЛ рдмрд┐рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рд╣рдо рд╡рд░реНрдЧреАрдп рдЧреБрдг рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд┐рд░реНрдорд╛рдг рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдореМрдЬреВрджрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рди рддреЛрдбрд╝реЗрдВред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдпрд╣ рдЦреБрд╢реА рд╣реИ: рд╡рд░реНрдЧ-рдХреНрд╖реЗрддреНрд░-рдкреНрд░рд╕реНрддрд╛рд╡ , рдЬреЛ рдХрд┐ tc39 рд╕рдорд┐рддрд┐ рдХреЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреА рдкреАрдбрд╝рд╛ рдХреЗ рдмрд╛рдж рднреА stage 3
рдорд┐рд▓рд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреНрд░реЛрдо рдореЗрдВ рднреА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рдирдИ рднрд╛рд╖рд╛ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд▓реЗрдЦ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рд╡рд░реНрддрдорд╛рди рд▓рд╛рдкрддрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг
рдореИрдВ рдпрд╣рд╛рдБ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдореВрд▓ рд╡рд┐рд╡рд░рдг , FAQ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдКрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдБрдЧрд╛ред
рдХреНрд▓рд╛рд╕ рдлреАрд▓реНрдбреНрд╕
рдЦреЗрддреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
class A { x = 1; method() { console.log(this.x); } }
рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдЦреЗрддреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ:
const a = new A(); console.log(ax);
рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдФрд░ рдХрдИ рд╕рд╛рд▓реЛрдВ рд╕реЗ рд╣рдо рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреИрдмрд▓ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ред
рдХреЗрд╡рд▓ рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рдпрд╣ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ [[Define]]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ [[Set]]
рд╢рдмреНрджрд╛рд░реНрде рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЗрд╕ рд╕рдордп рд░рд╣рддреЗ рдереЗред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдКрдкрд░ рдХрд╛ рдХреЛрдб рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ :
class A { constructor() { this.x = 1; } method() { console.log(this.x); } }
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
class A { constructor() { Object.defineProperty(this, "x", { configurable: true, enumerable: true, writable: true, value: 1 }); } method() { console.log(this.x); } }
рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЧрдВрднреАрд░ рдЕрдВрддрд░ рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИ:
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ рд╣реИ:
class A { x = 1; method() { console.log(this.x); } }
рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдордиреЗ рдПрдХ рдФрд░ рдмрдирд╛рдпрд╛:
class B extends A { x = 2; }
рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:
const b = new B(); b.method();
рддрдм, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдХреНрд▓рд╛рд╕ A
рдХреЛ рдПрдХ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
class A { _x = 1;
рдФрд░ [[Set]]
рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рд▓реЗрдХрд┐рди [[Define]]
ред рдЕрдм b.method()
рдХреЙрд▓ 2
рдмрдЬрд╛рдп 1
рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧрд╛ред рдФрд░ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ Object.defineProperty
рдкреНрд░реЙрдкрд░реНрдЯреА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдХреНрд▓рд╛рд╕ A
рд╕реЗ Object.defineProperty
/ рд╕реЗрдЯрд░ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрдЪреНрдЪреЗ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ, рд╣рдордиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА x
рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ , рдЗрд╕реА рддрд░рд╣ рд╣рдо рдЗрд╕реЗ рд▓реЗрдпрд┐рдХрд▓ рдореЗрдВ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const x = 1; { const x = 2; }
рд╕рдЪ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХреЗ no-shadowed-variable
/ no-shadow
рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдирд░ рд╣рдореЗрдВ рдмрдЪрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдИ no-shadowed-class-field
рдХреЛ рд╢реВрдиреНрдп рдХрд░ рджреЗрдЧрд╛ред
рд╡реИрд╕реЗ, рдореИрдВ shadowed
рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдлрд▓ рд░реВрд╕реА рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВ рдирдП рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд┐рд░реЛрдзреА рдирд╣реАрдВ рд╣реВрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рджреВрд╕рд░реЗ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛), рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрдкрдиреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рд╣реИрдВред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпреЗ рдкреНрд▓рд╕ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╢реВрдиреНрдп рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ babel6
- рд╣рдо рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ [[Set]]
рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ babel6
рдФрд░ TypeScript
рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдЪ рд╣реИ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ babel7
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рдореВрд▓ рдЪрд░реНрдЪрд╛рдПрдБ рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдкрдврд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░
рдФрд░ рдЕрдм рд╣рдо рдЗрд╕ рдПрдХ рдХреЗ рд╕рдмрд╕реЗ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред рдЗрддрдирд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИ рдХрд┐:
- рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рдХреНрд░реЛрдо рдХреИрдирд░реА рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рдЕрднреА рднреА рдзреНрд╡рдЬ рдХреЗ рдкреАрдЫреЗ рд╣реИрдВ;
- рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╡рд░реНрддрдорд╛рди рдПрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрди рджреЛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЕрднреА рднреА рдмрдирд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ , рджреЛ , рддреАрди рдФрд░ рдЪрд╛рд░ );
- рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рд╕рдорд┐рддрд┐ рдХреЗ рд╕рджрд╕реНрдп (рдЬреИрд╕реЗ рдПрд▓рди рд╡рд┐рд░реНрдлрд╝реНрд╕-рдмреНрд░реЙрдХ рдФрд░ рдХреЗрд╡рд┐рди рд╕реНрдорд┐рде ) рд╕реНрдЯреЗрдЬ 3 рдХреЗ рдмрд╛рд╡рдЬреВрдж рдмреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ ;
- рдпрд╣ рдПрдХ рдпрд╛рдж рдХрд┐рдпрд╛ рдореБрджреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╕реЗрдЯ - рд╡рд░реНрддрдорд╛рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ 129 + рдореВрд▓ рдореЗрдВ 96 , рдмрдирд╛рдо BigInt рдХреЗ рд▓рд┐рдП , рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдзрд╛рд░рдХ рдХреЗ рдкрд╛рд╕ рдЬреНрдпрд╛рджрд╛рддрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ ;
- рдореБрдЭреЗ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рднреА рджрд╛рд╡реЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдерд╛;
- рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рдПрдлрдПрдХреНрдпреВ рд▓рд┐рдЦрдирд╛ рдерд╛ рдЬреЛ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдХрдордЬрд╝реЛрд░ рддрд░реНрдХ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд░реНрдЪрд╛рдПрдБ рд╕рд╛рдордиреЗ рдЖрдИрдВ ( рдПрдХ , рджреЛ )
- рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рд╕рд╛рд░рд╛ рдЦрд╛рд▓реА рд╕рдордп (рдФрд░ рдХрднреА-рдХрднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП) рдПрдХ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд╣ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдерд╛ рдпрд╛ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рддрд╛рдпрд╛;
- рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ:
class A { #priv; }
рдФрд░ рдЙрдирдХреА рдкрд╣реБрдВрдЪ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
class A { #priv = 1; method() { console.log(this.#priv); } }
рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рднреА рдирд╣реАрдВ рдЙрдард╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХрд╛ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдмрд╣реБрдд рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ ( this.#priv !== this['#priv']
), рдкрд╣рд▓реЗ рд╕реЗ рдЖрд░рдХреНрд╖рд┐рдд private
/ protected
рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдЬрд░реВрд░реА рдЕрддрд┐рд░рд┐рдХреНрдд рджрд░реНрдж рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП), рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдиреНрдп рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реНрд╡рдпрдВ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред рдпрджреНрдпрдкрд┐ рдпрд╣ рд╕рдм рдореВрд▓ рдХрд╛рд░рдг рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЧрд╣рди рдЕрдзреНрдпрдпрди рдФрд░ рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред
рдпрд╣ рд╕рдм рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬрд╣рд╛рдВ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдПрд╕реНрдереЗрдЯрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдмрд╣реБрдд рдордЬрдмреВрдд рд╣реИрдВред рдФрд░ рдХреЛрдИ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдПрдХ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ: рд╢рдмреНрджрд╛рд░реНрде рдХреА рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИ ...
рд╢рдмреНрджрд╛рд░реНрде WeakMap
рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдореМрдЬреВрджрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╣реИред рд╣рдо рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд╕рд╛рде рдФрд░ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП:
const privatesForA = new WeakMap(); class A { constructor() { privatesForA.set(this, {}); privatesForA.get(this).priv = 1; } method() { console.log(privatesForA.get(this).priv); } }
рд╡реИрд╕реЗ, рдЗрд╕ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдорд┐рддрд┐ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдПрдХ рдЫреЛрдЯреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рдмрдирд╛рдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рдирд┐рдЬреА рд░рд╛рдЬреНрдп рдХрд╛ рдЕрднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рдорд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рд╕реНрд╡рд░реВрдкрд┐рдд рдХреЛрдб рдХреЗрд╡рд▓ 27 рд▓рд╛рдЗрдиреЗрдВ рд▓реЗрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо hard-private
, рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░реА рдХреЛрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд / рдмрд╛рдзрд┐рдд / рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА рд╣рдо рдПрдХ рд╣реА рд╡рд░реНрдЧ рдХреЗ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
isEquals(obj) { return privatesForA.get(this).id === privatesForA.get(obj).id; }
рдЦреИрд░, рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдЗрд╕ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрд╡рдпрдВ рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, brand-checking
рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ (рдЖрдк Google рдпрд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ - рдЖрдк рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИрдВ)ред
brand-checking
duck-typing
рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдВрдЪ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ - рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдПрдХрд▓ рдкрддреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рди рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╛рд╕рд┐рдд рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдПрдХ рд╣реИ рдФрд░ рдмрд┐рдирд╛ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд╕реАрдзреЗ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЗрд╕реЗ рдЙрдЪрд┐рдд рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХрд╛ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирддреЗ рд╣реИрдВред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрддреНрд╕реБрдХ рдЕрд╡рд╕рд░ рд╣реИ, рдЬреЛ рдХрд┐
рдкреИрдЯрд░реНрди ( рд▓рдШреБ рдФрд░ рд▓рдВрдмреА рд╡рд┐рд╡рд░рдг), Realms
рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рдЪрд╛рд░ рдФрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬреЛ рдорд╛рд░реНрдХ рд╕реИрдореБрдЕрд▓ рдорд┐рд▓рд░ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВ (рд╡рд╣ рд╕рдорд┐рддрд┐ рдХреЗ рд╕рджрд╕реНрдп рднреА рд╣реИрдВ), рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рд▓рдЧрднрдЧ рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рд╕рдВрдпреЛрдЧ рд╕реЗ, рдореИрдВ рдЕрднреА рднреА рдПрдХ рдЭрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдпрд╛ рдерд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рддрдм рдХреНрдпрд╛ рдерд╛) рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП vm2 рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ред
brand-checking
рд╕рдорд╕реНрдпрд╛
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, brand-checking
duck-typing
рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рд╣реЛрдирд╛:
const brands = new WeakMap(); class A { constructor() { brands.set(this, {}); } method() { return 1; } brandCheckedMethod() { if (!brands.has(this)) throw 'Brand-check failed'; console.log(this.method()); } }
brandCheckedMethod
рдХреЛ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ A
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ A
рдФрд░ рднрд▓реЗ рд╣реА рд▓рдХреНрд╖реНрдп рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ brandCheckedMethod
рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧреА:
const duckTypedObj = { method: A.prototype.method.bind(duckTypedObj), brandCheckedMethod: A.prototype.brandCheckedMethod.bind(duckTypedObj), }; duckTypedObj.method();
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рд╕рд┐рдВрдереЗрдЯрд┐рдХ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ duckTypedObj
рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо Proxy
рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред
рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░реЙрдХреНрд╕реА рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд▓рд┐рдП, рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╡рд╕реНрддреБрдУрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВ, рдЕрд░реНрдерд╛рддреН:
const a = new A(); const proxy = new Proxy(a, { get(target, p, receiver) { const property = Reflect.get(target, p, receiver); doSomethingUseful('get', retval, target, p, receiver); return (typeof property === 'function') ? property.bind(proxy) : property; } });
рдХреЙрд▓ proxy.method();
рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рдШреЛрд╖рд┐рдд рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ рдФрд░ 1
рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░реЙрдХреНрд╕реА.рдмреНрд░рд╛рдВрдбрдХреИрдХреЗрдбрдореЗрдереЛрдб proxy.brandCheckedMethod();
рдХрд╣рддреЗ рд╣реБрдП proxy.brandCheckedMethod();
рдкреНрд░реЙрдХреНрд╕реА рд╕реЗ рджреЛ рдмрд╛рд░ рдЙрдкрдпреЛрдЧреА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ a !== proxy
, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ brand-check
рдкрд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖред
рд╣рд╛рдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ / рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░реЙрдХреНрд╕реА рдирд╣реАрдВ рдФрд░ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рд▓реЗрдХрд┐рди рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЧреБрдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: MobX 5 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХреЗ рд▓рд┐рдП, Vue.js рдФрд░ рдСрд░реЗрд▓рд┐рдпрд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ )ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрдм рддрдХ brand-check
рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддрдм рддрдХ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХреМрди рд╕рд╛ рдЯреНрд░реЗрдб-рдСрдл рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЙрд╕реЗ рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕реНрдкрд╖реНрдЯ brand-check
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ brand-check
рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреАред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд░реНрддрдорд╛рди рдиреЗ рд╣рдореЗрдВ рдЗрд╕ рд▓рдЪреАрд▓реЗрдкрди рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ:
class A { #priv; method() { this.#priv;
рдРрд╕реА method
рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧреА рдпрджрд┐ рдЗрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ A
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ A
рдФрд░ рд╕рдмрд╕реЗ рдмреБрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ brand-check
рдпрд╣рд╛рдВ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рдиред
рдЬрдмрдХрд┐ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЗ рд▓рд┐рдП
рд▓рдЧрднрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, brand-check
рдореЗрдВ рдПрдХ рдХрдо рд╕рдВрдХреАрд░реНрдг рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рддрдереНрдп рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдирдЬрд╛рдиреЗ brand-check
рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЬрдм рдбреЗрд╡рд▓рдкрд░ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдЫрд┐рдкрд╛рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реИред
рдФрд░ рдЗрд╕рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдирд╛рд░рд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рдерд╛ # is the new _
рдХреЗрд╡рд▓ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдЖрдк рдпрд╣ рднреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЪрд░реНрдЪрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЛрд▓ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ ред рдСрд░реЗрд▓рд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рд▓реЗрдЦрдХ Vue.js рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдмрд╛рдд рдХреА ред
рд╕рд╛рде рд╣реА, рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА , рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЙрдХреНрд╕реА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддреА рд╣реИ, рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд╕рдХрддреА рд╣реИред рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдЭрд┐рд▓реНрд▓реА рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдкреВрд░реА рдЪрд░реНрдЪрд╛ ред
рд╡рд┐рдХрд▓реНрдк
рдЗрди рд╕рднреА рдЪрд░реНрдЪрд╛рдУрдВ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрддрд╛ рдЕрдЧрд░ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрддрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реНрдЯреЗрдЬ 1 рдореЗрдВ рдПрдХ рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдпрд╣рд╛рдВ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рджреВрдВрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред
- Symbol.pStreet - рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд┐рддрд┐ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ prozazilред
- рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрдкрдиреЗ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдЗрд╕ рдкрд░ рд╕рдХреНрд░рд┐рдп рдХрд╛рд░реНрдп рдХреА рдХрдореА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдврдирд╛ рдХрдард┐рди рд╣реИ)
- рдПрдХреАрдХреГрдд
brand-check
рдХреА рдХрдореА, рдЭрд┐рд▓реНрд▓реА рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ + рдпрд╣ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ) рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕рдорд┐рддрд┐ рдХреА рдЖрдЦрд┐рд░реА рдмреИрдардХ рдореЗрдВ рд╡рд╛рдкрд╕ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред - рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдХ рдХреЗ рдКрдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ
- рдХрдХреНрд╖рд╛рдПрдВ 1.1 - рдкрд╣рд▓реЗ рдПрдХ рд╣реА рд▓реЗрдЦрдХ рд╕реЗ рдкреЙрдЬрд╝реЛрдЬрд╝рд▓
- рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рд▓реЗрдЦ рдХреЗ рд▓рд╣рдЬреЗ рд╕реЗ, рд╢рд╛рдпрдж рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдорд┐рддрд┐ рдХреА рдирд┐рдВрджрд╛ рдХрд░рддрд╛ рд╣реВрдВ - рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ (рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд┐рдВрджреБ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рджрд╢рдХреЛрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХрд┐ рд╕рдорд┐рддрд┐ рдиреЗ рдЬреЗрдПрд╕ рдореЗрдВ рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛, рдЙрджреНрдпреЛрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдмрджрд▓ рдЧрдИ рд╣реИрдВ, рдФрд░ рд▓реБрдХ рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рдЭреВрдареА рд░реИрдВрдХрд┐рдВрдЧ рд╣реЛ рдЧрдИред ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо, рдПрдХ рд╕рдореБрджрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, tc39 рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реБрдП рдЙрдиреНрд╣реЗрдВ рддреЗрдЬреА рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкреНрд░реЛрдЬреЛрд╕ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╕рдордп рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрдХреНрд░реЛрд╢ рдХреЛ рдиреАрдЪреЗ рд▓рд╛рддреЗ рд╣реИрдВ рдЬрдм рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╕ рд╡рд┐рдлрд▓ рд░рд╣реАред
рдЗрд╕реЗ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдбреБрдмреЛрдиреЗ рдФрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ - рд▓реЗрдХрд┐рди рдореИрдВ рдереЛрдбрд╝рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, stage1
рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ babel
рдФрд░ рд╕рднреА рдореЗрдВ рдпрд╛рдж рдХрд┐рдпрд╛)ред
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ - рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реВрдВрдЧрд╛ред рдФрд░ рдореИрдВ рдмрджрд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рд╕рдорд┐рддрд┐ рдХреЛ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред