рд╕рдм рдХреБрдЫ рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдФрд░ рдмрддрдЦ рдЧрд▓рддрдлрд╣рдореА

рдЫрд╡рд┐


рд╣рд░ рдХреЛрдИ рдЬреЛ рдХреБрдЫ рднреА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрджреНрднреБрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ: рдЯрд╛рдЗрдкреЛрдлрд╝ рдирд▓ "рд╡рд╕реНрддреБ" рдХреНрдпреЛрдВ рд╣реИ? рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЯрд╛рдЗрдкреЛрдлрд╝ "рдлрд╝рдВрдХреНрд╢рди" рджреЗрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдПрд░реЗ рд╕реЗ - "рдСрдмреНрдЬреЗрдХреНрдЯ" ? рдФрд░ рдЬрд╣рд╛рдВ рдЕрдкрдиреЗ vaunted рд╡рд░реНрдЧреЛрдВ рдкрд░ рд╣реЛ рдЬрд╛рдУ? рдФрд░ рдпрджреНрдпрдкрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рддрдереНрдп рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ, рдореИрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдЦрд╛ рдереЛрдбрд╝реА рдФрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред


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


рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреГрд╖реНрдарднреВрдорд┐


рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣рдореЗрд╢рд╛ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд░рд╣рд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдмрд╕:


if (typeof value === 'object' && value !== null) { // awesome code around the object } 

рдФрд░ рдЕрдм рдЖрдк рдПрдирдкреАрдИ рдХреЗ рд╕реНрдерд╛рдиреАрдп рдПрдирд╛рд▓реЙрдЧ - Cannot read property of null ред рдХреНрдпрд╛ рд╡рд╣ рдкрд░рд┐рдЪрд┐рдд рд╣реИ?


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


рдлрд┐рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдУрдУрдкреА рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рд╛рдорд╛рдиреНрдп рдерд╛, рдпрд╛рдж рд╣реИ? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдлрд┐рд░ рд╕рдорд╛рд░реЛрд╣ рдФрд░ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЬрд╛рджреВ рдХреЗ рд╕рд╛рде, рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╣реИ:


 f.toString().match(/function\s+(\w+)(?=\s*\()/m)[1] 

рдХрднреА-рдХрднреА рд╡реЗ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдРрд╕реЗ рдкреНрд░рд╢реНрди рдкреВрдЫрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ?


рд╣рд╛рдВ, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 function Type() {}; Type.prototype.typeName = 'Type'; var o = new Type; o.typeName; < "Type" 

рдХреЗрд╡рд▓ рджреЛ рдмрд╛рд░ "рдЯрд╛рдЗрдк" рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛: рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдореЗрдВ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВред


рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд╕реНрддреБрдУрдВ (рдЬреИрд╕реЗ рдРрд░реЗ рдпрд╛ рджрд┐рдирд╛рдВрдХ ) рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЧреБрдкреНрдд рд╕рдВрдкрддреНрддрд┐ [[рд╡рд░реНрдЧ]] рдереА , рдЬрд┐рд╕реЗ рдорд╛рдирдХ рд╡рд╕реНрддреБ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЭреБрдХрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛:


 Object.prototype.toString.call(new Array); < "[object Array]" 

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдЕрдВрддрддрдГ рднрд╛рд╖рд╛ рдореЗрдВ рддрдп рдХрд┐рдП рдЧрдП рд╣реИрдВ: рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдИ рд▓рд╛рдЗрд╡рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рд╣реИ; рд╣рдо рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ!


рдЙрд╕реА рд╕рдордп рдХреЗ рдЖрд╕рдкрд╛рд╕, Symbol.toStringTag рдФрд░ Function.name рджрд┐рдЦрд╛рдИ рджрд┐рдП , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЕрдкрдиреЗ рдЯрд╛рдЗрдкреЛрдлрд╝ рдХреЛ рдирдП рддрд░реАрдХреЗ рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдореБрджреНрджрд╛ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХрдСрд╡рд░рдлреНрд▓реЛ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдВрдкрд╛рджрдХреАрдп рдмреЛрд░реНрдб рд╕реЗ рд╕рдВрдкрд╛рджрдХреАрдп рдмреЛрд░реНрдб рддрдХ рдЙрдарддрд╛ рд╣реИ: 9 рд╕рд╛рд▓ рдкрд╣рд▓реЗ , 7 рд╕рд╛рд▓ рдкрд╣рд▓реЗ , рдЗрддрдирд╛ рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдпрд╛ рдпрд╣ рдФрд░ рд╡рд╣ ред


рдорд╛рдорд▓реЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╡рд░рдг Symbol.toStringTag рдФрд░ Function.name рдореЗрдВ рдЬрд╛рдВрдЪ рдХреА ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдВрддрд░рд┐рдХ toStringTag рдЪрд░рд┐рддреНрд░ рдПрдХ рдЖрдзреБрдирд┐рдХ [[рд╡рд░реНрдЧ]] рд╣реИ , рдХреЗрд╡рд▓ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдлрдВрдХреНрд╢рди.рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд▓рдЧрднрдЧ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрд╛рдиреВрдиреА рд░реВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо: рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИред


рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ, рдЖрдк рдРрд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 function getTag(any) { if (typeof any === 'object' && any !== null) { if (typeof any[Symbol.toStringTag] === 'string') { return any[Symbol.toStringTag]; } if (typeof any.constructor === 'function' && typeof any.constructor.name === 'string') { return any.constructor.name; } } return Object.prototype.toString.call(any).match(/\[object\s(\w+)]/)[1]; } 

  1. рдпрджрд┐ рдЪрд░ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рддреЛ:
    1.1ред рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ StringTag рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ;
    1.2ред рдпрджрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдирд╛рдо рдЧреБрдг рд╣реИ, рддреЛ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ;
  2. рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрдЯреНрд░реЗрдЪрд┐рдВрдЧ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдмрд╣реБрд░реВрдкрд┐рдХ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред

рд╕реНрдЯреНрд░рд╛рдВрдЧрдЯреИрдЧ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБ:


 let kitten = { [Symbol.toStringTag]: 'Kitten' }; getTag(kitten); < "Kitten" 

рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде toStringTag :


 class Cat { get [Symbol.toStringTag]() { return 'Kitten'; } } getTag(new Cat); < "Kitten" 

Constructor.name рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:


 class Dog {} getTag(new Dog); < "Dog" 

тЖТ рдЗрд╕ рднрдВрдбрд╛рд░ рдореЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрдм рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрддрдЦ рдЪреЗрдХ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд░рд▓ рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрднреА рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рдХреБрдЫ рдХреЗ рдкрд╛рд╕ рдмрдВрдЯрд╡рд╛рд░реЗ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╕рд░рдгреА рд╣реИ рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ?


рдХреБрдЫ рдЧрд▓рдд рдмрддреНрддрдЦ


рдХреБрдЫ рд╡рд┐рдзрд┐рдпреЛрдВ рдпрд╛ рдЧреБрдгреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдПрдХ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдордЭрдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рдХрд┐рд╕реА рдХрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдЧреЗрдЯрдЯреИрдЧ рдХреЛ рд▓реЗ рд▓реВрдВрдЧрд╛ рдФрд░ рдХреБрдЫ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рдорд╛рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛ ред


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


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ "рдмрддрдЦ" рд╡рд░реНрдЧ рд╣реИред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдИрдПрд╕ -2015 рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЗрдВ рдХрднреА-рдХрднреА рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдпреЗ рд╡рд░реНрдЧ рдХреНрдпрд╛ рд╣реИрдВред рдФрд░ рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ:


 class Person { constructor(name) { this.name = name; } hello() { return this.name; } } let user = new Person('John'); user.hello(); < "John" 

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреНрд▓рд╛рд╕ рдХреАрд╡рд░реНрдб, рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдлреИрд▓реА рд╣реБрдИ рд╣реИ ред рд╣рдо рдирдП рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрдереЛрдВ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рдПрдХ рд╡рд░реНрдЧ рд╣реИ!


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдЖрдк "рдХреНрд▓рд╛рд╕" рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдирдП рддрд░реАрдХреЗ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рде рд╣реА рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдорд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ:


 Person.prototype.hello = function() { return `Is not ${this.name}`; } user.hello(); < "Is not John" 

рдпрд╣ рдордд рдХрд░реЛ!


рдФрд░ рдХреБрдЫ рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЙрдбрд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рдкрд░реНрд╕рди рд╕реЗ рдЧреЗрдЯрдЯреИрдЧ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ "рдлрдВрдХреНрд╢рди" рдорд┐рд▓рддрд╛ рд╣реИ, рди рдХрд┐ рдмрдирд╛рд╡рдЯреА "рдХреНрд▓рд╛рд╕" , рдФрд░ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред


рдЕрдиреНрдп рдХрд╛рд░реНрдп


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


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


рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реИрдВ :


рдлрдВрдХреНрд╢рди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЙрдк-рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдлрдВрдХреНрд╢рдирд▓ рд╕рдмрдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдмрд┐рд▓реНрдЯ-рдЗрди рдЬреЗрдирд░реЗрдЯрд░рдлрдВрдХреНрд╢рди рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕рдлрдВрдХреНрд╢рди рдХреЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлрдВрдХреНрд╢рди рдФрд░ рдЬреЗрдирд░реЗрдЯрд░рдлрдВрдХреНрд╢рди рдФрд░ рдПрд╕рд┐рдВрдХреНрдлреЗрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ "рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛" рд╣реИред рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреЗрдп рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреА рдЕрдкрдиреА рдЕрдиреВрдареА рдкреНрд░рдХреГрддрд┐ рд╣реИред рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк:


 async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } getTag(sleep); < "AsyncFunction" 

рдЙрд╕реА рд╕рдордп, рд╣рдо рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддреБрд░рдВрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдХреЙрд▓ рд╣рдореЗрдВ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ:


 getTag(sleep(100)); < "Promise" 

рдЬрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 function* incg(i) { while(1) yield i += 1; } getTag(incg); < "GeneratorFunction" 

рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ - рдЬреЗрдирд░реЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ:


 let inc = incg(0); getTag(inc); < "Generator" 

TheStringTag рдкреНрд░рддреАрдХ asinks рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкреЛрдлрд╝ "рдлрд╝рдВрдХреНрд╢рди" рджрд┐рдЦрд╛рдПрдЧрд╛ред


рдЗрдирд▓рд╛рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрдЯ , рдореИрдк , рджрд┐рдирд╛рдВрдХ рдпрд╛ рддреНрд░реБрдЯрд┐ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП getTag рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ "рдлрд╝рдВрдХреНрд╢рди" рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ - рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрдЧреНрд░рд╣, рджрд┐рдирд╛рдВрдХ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ред рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рд╣рдо рдХреНрд░рдорд╢рдГ рдорд┐рд▓рддреЗ рд╣реИрдВ - "рд╕реЗрдЯ" , "рдореИрдк" , "рджрд┐рдирд╛рдВрдХ" рдФрд░ " рддреНрд░реБрдЯрд┐ "ред


рд▓реЗрдХрд┐рди рдмрд╛рд╣рд░ рджреЗрдЦреЛ! рдЕрднреА рднреА JSON рдпрд╛ рдЧрдгрд┐рдд рдЬреИрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЬрд▓реНрджреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдирд╣реАрдВ! рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИ - рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯред рд╡реЗ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИрдВ ( is not a constructor )ред рдПрдХ рдЯрд╛рдЗрдкреЛрдлрд╝ рдХреЙрд▓ "рдСрдмреНрдЬреЗрдХреНрдЯ" (рдЬреЛ рдЗрд╕ рдкрд░ рд╕рдВрджреЗрд╣ рдХрд░реЗрдЧрд╛) рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди getTag toStringTag рдХреА рдУрд░ рдореБрдбрд╝ рдЬрд╛рдПрдЧрд╛ рдФрд░ "JSON" рдФрд░ "рдЧрдгрд┐рдд" рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ ред рдпрд╣ рдЖрдЦрд┐рд░реА рдЕрд╡рд▓реЛрдХрди рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред


рдмрд┐рдирд╛ рдХрдЯреНрдЯрд░рддрд╛ рдХреЗ рдЪрд▓рддреЗ рд╣реИрдВ


рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреВрдЫрд╛, рдЬрдм рдореИрдВрдиреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг (рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓рдиреЗ) рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рдирд┐рд░реАрдХреНрд╖рдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╕рд╛рдордЧреНрд░реА рдХреЗрд╡рд▓ рдЕрд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдЯрд╛рдЗрдкреЛрдлрд╝ , рдЗрдВрд╕реНрдЯрд╛рдлреЙрдлрд╝ , рдЕрд░реНрд░реЗ.рдЗрд╕рдПрд░реНрд░реЗ , рдЖрдИрдПрд╕рдПрдирдПрди рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рддреНрдпрд╛рдкрди рдХрд░рддреЗ рд╕рдордп рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдбрд╛рд░реНрдЯ рдпрд╛ рдлрд╝реНрд▓реЛ рд╣реИрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ!

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


All Articles