рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореВрд▓ рдмрд╛рддреЗрдВ рдФрд░ рдЧрд▓рдд рдзрд╛рд░рдгрд╛рдПрдБ

рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдХреНрд▓рд╛рд╕реЗрд╕, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕

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

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрд┐рдХрд▓ рдбреЗрд▓рд┐рдЧреЗрдЯрд┐рдВрдЧ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕


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

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

рдЪрд▓реЛ рдХреЛрдб рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ:
var Grandfather = function () {}; //  Grandfather Grandfather.prototype.color = 'green'; var Father = function () {}; //  Father Father.prototype = new Grandfather(); //  ,        var Son = function () {}; //  Son Son.prototype = new Father(); //  var u = new Grandfather(); //  "" Grandfather var f = new Father(); //  "" Father var s = new Son(); //  "" Son //    console.log([u.color, f.color, s.color]); // ["green", "green", "green"] //         Grandfather.prototype.color = 'blue'; console.log([u.color, f.color, s.color]); // ["blue", "blue", "blue"] //          Father.prototype.color = 'green'; //     : // Grandfather.prototype.color = 'green'; console.log([u.color, f.color, s.color]); // ["blue", "green", "green"] //   Grandfather.prototype.color = 'blue'; console.log([u.color, f.color, s.color]); // ["blue", "green", "green"] //             s.color = 'black'; //   ,      console.log([u.color, f.color, s.color]); // ["blue", "green", "black"] var SonsSon = function () {}; //  SonsSon SonsSon.prototype = new Son(); //  var ss = new SonsSon(); //  "" SonsSon //      console.log([u.color, f.color, s.color, ss.color]); // ["blue", "green", "black", "green"] 

рдкрдврд╝реЗрдВ:
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдУрдУрдкреА: рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо
рд╣рдо рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, __proto__, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдЙрдирдХреЗ рдЪреЗрди рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛, рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЪреЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рдкрд░рд┐рдорд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рд╕рд╛рдЭрд╛ рдЧреБрдгреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдкрдиреЗ рдЧреБрдг (рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдг) рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИ, рдмрджрд▓реЗ рдореЗрдВ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рднреА рдЕрдкрдиреА рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реЛрддреА рд╣реИ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрддреА рд╣реИ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рднреА рдЕрдкрдиреА рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реЛрддреА рд╣реИ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓рд┐рдВрдХ рди рд╣реЛ рдЬрд╛рдПред рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ (рдПрдХ рдЕрд╡рдзрд┐ рдпрд╛ рдХреЛрд╖реНрдардХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдирд╛рдо рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкрд╣рд▓рд╛, рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реИ (рдпрджрд┐ рдпрд╣ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдЦреЛрдЬ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ (рдпрджрд┐ рд╡рд╣рд╛рдБ рд╣реИ, рддреЛ рдпрд╣ рд▓реМрдЯрддрд╛ рд╣реИ), рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдПрдХ рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЕрдЧрд▓реА рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП __proto__ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдкрдврд╝рдиреЗ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреА рдЦреЛрдЬ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
 function getProperty(obj, prop) { if (obj.hasOwnProperty(prop)) return obj[prop] else if (obj.__proto__ !== null) return getProperty(obj.__proto__, prop) else return undefined } 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2 рдЧреБрдг (x, y) рдФрд░ рдкреНрд░рд┐рдВрдЯ рд╡рд┐рдзрд┐ рд╡рд╛рд▓реЗ рд╕рд░рд▓ рдмрд┐рдВрджреБ 2D рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ред
 var Point = { x: 0, y: 0, print: function () { console.log(this.x, this.y); } }; var p = {x: 10, __proto__: Point}; //  'x'    : /* px */ getProperty(p, 'x'); // 10 //  'y'    __proto__  - Point /* py */ getProperty(p, 'y'); // 0 //  print    __proto__  - Point /* p.print() */ getProperty(p, 'print').call(p); // 10 0 
рдореИрдВрдиреЗ рдкрд░рд┐рдгрд╛рдореА рдлрд╝рдВрдХреНрд╢рди call рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ call рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛, рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдиреАрдЪреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Point рдореЗрдВ рдПрдХ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ __proto__ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИ, рдЬреЛ рдХрд┐ Point рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ Object.prototype рдХреЛ Object.prototype ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
  /* SonsSon <- Son <---- Father <- Grandfather <-- Object <-- null */ console.log(ss.__proto__.__proto__.__proto__.__proto__.__proto__.__proto__ === null); 

__proto__, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рдирдпрд╛ рдСрдкрд░реЗрдЯрд░


рдКрдкрд░ рдПрдХ "рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХреЛрдб" рдерд╛, рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЬреАрд╡рди рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
 function Point(x, y) { //  Point this.x = x; this.y = y; } Point.prototype = { //   print: function () { console.log(this.x, this.y); } }; var p = new Point(10, 20); //    p.print(); // 10 20 

рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдореЗрдВ рд╣рдо рдХрдо рд╕реЗ рдХрдо рдЬрд╛рдирддреЗ рдереЗ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рднреНрд░рдорд┐рдд рдерд╛ред

рд╕рднреА "рдЬрд╛рджреВ" рдирдП рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдмреНрд░реЗрдВрдбрди рдЖрдЗрдЪ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛) рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдУрдУ рднрд╛рд╖рд╛рдУрдВ рдЬреИрд╕реЗ рд╕реА ++, рдЬрд╛рд╡рд╛ рдХреА рддрд░рд╣ рджрд┐рдЦреЗ, рдЗрд╕рд▓рд┐рдП рдирдпрд╛ рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдФрд░ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ ( new F(arguments...) ) рдХреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ:

1. рдПрдХрд▓ __proto__ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ __proto__ рдХрд╛ рд╕рдВрджрд░реНрдн F.prototype
2. рдПрдХреНрд╕рдХреНрдпреВрдЯрд░реНрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ F рдЬрд┐рд╕рдореЗрдВ this рдкрд╣рд▓реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╣реИ
3. рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдПрдХ New рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ new рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ:
 function New (F, args) { /*1*/ var n = {'__proto__': F.prototype}; /*2*/ F.apply(n, args); /*3*/ return n; } 

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреНрд╡рд╛рдЗрдВрдЯ рд╕реЗ рдмрджрд▓реЗрдВ:
 function Point(x, y) { //  Point this.x = x; this.y = y; } Point.prototype = { //   print: function () { console.log(this.x, this.y); } }; var p1 = new Point(10, 20); p1.print(); // 10 20 console.log(p1 instanceof Point); // true //  : var p2 = New(Point, [10, 20]); p2.print(); // 10 20 console.log(p2 instanceof Point); // true 

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЪреЗрдирд┐рдВрдЧ


рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг Father.prototype = new Grandfather() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред Father.prototype = new Grandfather() :
 var Grandfather = function () {}; //  Grandfather Grandfather.prototype.color = 'green'; var Father = function () {}; //  Father Father.prototype = new Grandfather(); //  ,        var Son = function () {}; //  Son Son.prototype = new Father(); //  

рдЕрдм рд╣рдо рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - new Grandfather() рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
 Father.prototype = { __proto__: { //  Grandfather color: 'green', __proto__: Object.prototype } }; 

рдЕрдм new Father() рдмреБрд▓рд╛рддреЗ рд╕рдордп new Father() рд╣рдореЗрдВ рдпрд╣ рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИ (рд╣рдо рддреБрд░рдВрдд рд╡рд╕реНрддреБ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ):
 Son.prototype = { __proto__: { //  Father __proto__: { //  Grandfather color: 'green', __proto__: Object.prototype } } } 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реИ (рдкреБрддреНрд░ рдЙрджрд╛рд╣рд░рдг)
 { color: 'black', //      __proto__: { //  Son __proto__: { //  Father color: 'green', //     __proto__: { //  Grandfather color: 'blue', //      __proto__: Object.prototype } } } } 

рдХреНрдпреЛрдВ Father.prototype = new Grandfather() рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ?
рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ Grandfather рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдгреЛрдВ рдХреЛ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ alert ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдХрд▓реА рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 function inherit (object, parent) { function F(){}; //   F.prototype = parent.prototype; //     object.prototype = new F(); //       return object; //     }; 

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
 var Grandfather = function () {}; //  Grandfather Grandfather.prototype.color = 'green'; var Father = function () {}; //  Father inherit(Father, Grandfather); //   

Grandfather рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЕрдЧрд░ рд╣рдо рд╕рднреА рдХреЛ рджрд╛рджрд╛рдЬреА рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЙрд▓ рдпрд╛ рдПрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░реЗрдВ
 var Father = function () { //  Father Grandfather.call(this); }; 


Instanceof рдСрдкрд░реЗрдЯрд░


 if (p instanceof Point) { // ... } 

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

instanceof рдСрдкрд░реЗрдЯрд░ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - obj рдФрд░ constructor: ( obj instanceof constructor )ред Constructor.prototype рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдпрд╣ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдирддрд╛ рдХреЛ obj.__proto__ === constructor.prototype ; рдпрджрд┐ рдпрд╣ рд╕рддреНрдп рд╣реИ, рддреЛ рдпрд╣ рд╕рд╣реА рд╣реИред

рд╣рдо рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ:
 function isInstanceOf(obj, constructor) { if (obj.__proto__ === constructor.prototype) return true; else if (obj.__proto__ !== null) return isInstanceOf(obj.__proto__, constructor) else return false } 

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 function Point(x, y) { //  Point this.x = x; this.y = y; } Point.prototype = { //   print: function () { console.log(this.x, this.y); } }; var p = new Point(10, 20); //    /* {} instanceof Object */ console.log(isInstanceOf({}, Object)); // true /* p instanceof Point */ console.log(isInstanceOf(p, Point)); // true /* p instanceof Object */ console.log(isInstanceOf(p, Object)); // true ,  Object     (Point.__proto__ === Object.prototype) /* p instanceof Array */ console.log(isInstanceOf(p, Array)); // false ,  Array     

рдпрд╣ рд╕рдВрдкрддреНрддрд┐


рдпрд╣ рдПрдХ рдмрдбрд╝реА рдЧрд▓рддреА рд╣реИред

рдХрдИ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдпрд╣ рдХреАрд╡рд░реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрддреНрдкрдиреНрди рд╡рд╕реНрддреБ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдпрд╣ рдХреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рдирд┐рдпрдо рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, (рдореИрдВ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛рдКрдВрдЧрд╛):
1. рдпрджрд┐ рд╡рд┐рдзрд┐ рдХреЛ рд╕реАрдзреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ( new, call, apply, bind, with, try catch рдмрд┐рдирд╛ new, call, apply, bind, with, try catch ), рддреЛ рдпрд╣ рд╡рд╣ рд╡рд╕реНрддреБ рд╣реЛрдЧреА рдЬреЛ рд╡рд┐рдзрд┐ рдирд╛рдо рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдмрд┐рдВрджреБ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддреА рд╣реИред
2. рдЕрдЧрд░ рдХреЛрдИ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИ (рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ), рддреЛ рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдЕрд╢рдХреНрдд рдпрд╛ рдЦрд┐рдбрд╝рдХреА (рд╡реИрд╢реНрд╡рд┐рдХ) рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ "рд╕рдЦреНрдд рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ"ред
3. рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдореВрд▓реНрдп рд╣реИ, рддреЛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 2 рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ

рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 var foo = { bar: function () { console.log(this); } }; var bar = foo.bar; bar(); // this === global (2) foo.bar(); // this === foo (1) (foo.bar)(); // this === foo     (1) //       -  (foo.bar = foo.bar)(); // this === global (3) (false || foo.bar)(); // this === global (3) (foo.bar, foo.bar)(); // this === global (3) function foo() { function bar() { console.log(this); } bar(); // this === global (2) } 

getProperty(p, 'print').call(p) рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ getProperty(p, 'print').call(p) рдпрд╣ рдЗрд╕ рдирд┐рдпрдо рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдкреНрд░рд┐рдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ - рд╡рд┐рдВрдбреЛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдпреЗ рдСрдкрд░реЗрдЯрд░ рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ this: new, call, apply, bind, with, try catch рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ this: new, call, apply, bind, with, try catch (рдЙрдирдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛)ред

рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ:
ECMA-262-3 рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛ред рднрд╛рдЧ 3: рдпрд╣

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдЕрд╢рдХреНрдд, рд╢реВрдиреНрдп


null - рдПрдХ рдЖрджрд┐рдо рдорд╛рди рдЬреЛ рдПрдХ рдЕрд╢рдХреНрдд, рдЦрд╛рд▓реА, рд╢реВрдиреНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд - рд╡рд╣ рдореВрд▓ рдорд╛рди рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдЬрдм рдЪрд░ рдХрд╛ рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)
рд╢реВрдиреНрдп рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ (рдпрд╛рдиреА, рдЬрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреЛрд╖реНрдардХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ) рдЬреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рдЕрдкреНрд░рднрд╛рд╡рд┐рдд рд░рд╣рддрд╛ рд╣реИ

рдирд┐рд╖реНрдХрд░реНрд╖


1. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреЛрдИ рдХрдХреНрд╖рд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ - рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИрдВ
2. рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ - рд╡рд╣ рдЖрдзрд╛рд░ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рднреА рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ
3. рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред
4. __proto__ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдирд┐рд░реНрдорд╛рддрд╛ (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк) рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ
5. рдирдпрд╛ рдСрдкрд░реЗрдЯрд░ рдПрдХ рдПрдХрд▓ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ __proto__, рдЬреЛ F.prototype рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдирд┐рд░реНрдорд╛рддрд╛ F рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╣реИ рдФрд░ рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
6. рдЗрдВрд╕реНрдЯреЙрдлрд╝ рдСрдкрд░реЗрдЯрд░ рдпрд╣ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдХреЙрдиреНрд╕реНрдЯреЛрд░реЗрдВрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдкрдиреЗ рдлреИрд╕рд▓реЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
7. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдХреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
8. рд╢реВрдиреНрдп рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдЕрд╢рдХреНрдд - рдЖрджрд┐рдо рдореВрд▓реНрдп

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, __proto__ рдХреЛ рд╕реАрдзреЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд░рд╛рдиреА рд╣реИред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Object.getPrototypOf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ (__proto__) рдиреЗ ECMAScript рдХреЗ "рдЗрдВрдЯрд░реНрдирд▓" рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд▓реЗрдЦ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛


рджрд┐рдорд┐рддреНрд░реА Soshinkov dsCode рдХреЗ рдмреНрд▓реЙрдЧ рд╕реЗ рд▓реЗрдЦ
рдХреИрд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рдЪреЗрдбреНрдпреВ)

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


All Articles