рдХреНрдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
PLO рдХрд╛ рд╢реБрджреНрдз рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ ECMA рд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рдкрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ peculiarities - рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ рдореИрдВ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрджреНрдзрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

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

рдХрдХреНрд╖рд╛рдПрдВ


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

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ , ECMA рд╕реНрдХреНрд░рд┐рдкреНрдЯ 6 рдореЗрдВ class рдХреАрд╡рд░реНрдб рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:

  class Duck{ constructor(name){ this.name = name; }, quack(){ return this.name +" Duck: Quack-quack!"; } } ///  class TalkingDuck extends Duck{ constructor(name){ super(name); }, quack(){ return super.quack() + " My name is " + this.name; } } ///  var donald = new TalkingDuck("Donald"); 

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

  var Duck = function(name){ this.name = name; }; Duck.prototype.quack = function(){ return this.name +" Duck: Quack-quack!"; }; ///  var TalkingDuck = function(name){ Duck.call(this, name); } TalkingDuck.prototype = Object.create(Duck.prototype); TalkingDuck.prototype.constructor = TalkingDuck; TalkingDuck.prototype.quack = function(){ return Duck.prototype.quack.call(this) + " My name is " + this.name; }; ///  var donald = new TalkingDuck("Donald"); 

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

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк


рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЙрд╕ рд╡рд░реНрдЧ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ:
  1. рдпрд╣ рдПрдХ рд░реЗрдбреА-рдЯреВ-рдпреВрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреА рдЕрдкрдиреА рдЕрд╡рд╕реНрдерд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдПрдХ рд╡рд░реНрдЧ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рдЗрдХрд╛рдИ, рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╕рд┐рдВрдЧрд▓рдЯрди рдореЗрдВ рд╕рдВрдпреБрдХреНрдд рд╣реИред
  2. рдСрдмреНрдЬреЗрдХреНрдЯ (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреНрд▓реЛрдирд┐рдВрдЧ) рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЙрд▓ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред

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

рд╡рд┐рд░рд╛рд╕рдд


рддреЛ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк (рдбреЗрд▓рд┐рдЧреЗрдЯрд┐рдВрдЧ) рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рддрд╛ рд╣реИред рдЖрдк рдЧреБрдг / рддрд░реАрдХреЛрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рд╡рд╕реНрддреБ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦреЛрдЬ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рдЖрджрд┐ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж

  var duck$ = {// "$"      "": duck$ == Duck.prototype name: "", quack: function(){ return this.name +" Duck: Quack-quack!"; } }; var donald = { __proto__: duck$, name: "Donald" }; var daffy = { __proto__: duck$, name: "Daffy" }; console.log( donald.quack() ); // Donald Duck: Quack-quack! console.log( daffy.quack() ); // Daffy Duck: Quack-quack! console.log( duck$.isPrototypeOf(donald) ); // true 

daffy рдФрд░ donald рдПрдХ рд╕рд╛рдорд╛рдиреНрдп quack() рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдбрдХ $ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ donald рдФрд░ daffy рд╡рд╕реНрддреБ рдХреЗ рдХреНрд▓реЛрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ duck$ , рдФрд░ рдПрдХ рд╡рд░реНрдЧ рдЙрдиреНрдореБрдЦ - "рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг" duck$ ред
рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ donald (рдпрд╛ daffy ) daffy рдореЗрдВ рдХреБрдЫ рдЧреБрдг рдЬреЛрдбрд╝рддреЗ / рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ "рд╡рд░реНрдЧ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА" duck$ рднреА рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред V8 рдмрд╕ рдпрд╣реА рдХрд░рддрд╛ рд╣реИ , рд╣рд░ рдмрд╛рд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рдЫрд┐рдкреЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ред

рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ __proto__ рд╕рдВрдкрддреНрддрд┐ рдЕрднреА рддрдХ рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ __proto__ рд╕рдВрднрд╡ ECMAScript 5 рддрд░реАрдХреЛрдВ Object.create рдФрд░ Object.getPrototypeOf :

  var donald = Object.create(duck$, { name: {value: "Donald"} }); console.log( Object.getPrototypeOf(donald) === duck$ ); // true }  var donald = Object.create(duck$, { name: {value: "Donald"} }); console.log( Object.getPrototypeOf(donald) === duck$ ); // true 


рдкреНрд░рд╛рд░рдВрдн


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

 var proto = { name: "Unnamed" }; 

рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ ECMA рд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ:

рдЖрд▓рд╕реА (рджреЗрд░реА) рдкреНрд░рд╛рд░рдВрдн


рдЖрд▓рд╕реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрдХ рдРрд╕реА рддрдХрдиреАрдХ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:
 var obj = { name: "", get lazy(){ console.log("  lazy..."); //  : var value = "   " + this.name; //  ,      //   ,    : Object.defineProperty(this, 'lazy', { value: value, writable: true, enumerable: true }); console.log(" ."); return value; }, //     // ,   - // (       ): set lazy(value){ console.log("  lazy..."); Object.defineProperty(this, 'lazy', { value: value, writable: true, enumerable: true }); } }; console.log( obj.lazy ); //   lazy... //     console.log( obj.lazy );//     //     obj.lazy = "";//   , ..    console.log( obj.lazy ); //  

рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рдлрд╛рдпрджреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


рддреБрд▓рдирд╛ рддрд╛рд▓рд┐рдХрд╛

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрдХрдХреНрд╖рд╛ (ECMA рд╕реНрдХреНрд░рд┐рдкреНрдЯ 5)рдХрдХреНрд╖рд╛ (ECMA рд╕реНрдХреНрд░рд┐рдкреНрдЯ 6)
рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╡рд░рдг ( "рд╡рд░реНрдЧ")
 var duck$ = { name: "Unnamed", get firstWords(){ var value = this.quack(); Object.defineProperty( this, 'firstWords', {value: value} ); return value; }, quack: function(){ return this.name +" Duck: Quack-quack!"; } }; 
 var Duck = function(name){ this.name = name||"Unnamed"; this.firstWords = this.quack(); }; Duck.prototype.quack = function(){ return this.name +" Duck: Quack-quack!"; }; 
 class Duck{ constructor(name="Unnamed"){ this.name = name; this.firstWords = this.quack(); }, quack(){ return this.name +" Duck: Quack-quack!"; } } 
рд╡рд┐рд░рд╛рд╕рдд
 var talkingDuck$ = Object.create(duck$, { quack: {value:function(){ return duck$.quack.call(this) + " My name is " + this.name; }} }); 
 var TalkingDuck = function(name){ Duck.call(this, name); } TalkingDuck.prototype = Object.create(Duck.prototype); TalkingDuck.prototype.constructor = TalkingDuck; TalkingDuck.prototype.quack = function(){ return Duck.prototype.quack.call(this) + " My name is " + this.name; }; 
 class TalkingDuck extends Duck{ constructor(name){ super(name); }, quack(){ return super.quack() + " My name is " + this.name; } } 
рдЙрджрд╛рд╣рд░рдг рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдФрд░ рдЖрд░рдВрдн рдХрд░рдирд╛
 var donald = Object.create(talkingDuck$); donald.name = "Donald"; 
 var donald = new TalkingDuck("Donald"); 
 var donald = new TalkingDuck("Donald"); 


рднрд╛рдЧ 2 - рдкреНрд░рджрд░реНрд╢рди: __proto__ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдирд╛



рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА:
рдбреЙ рдПрдХреНрд╕рд▓ рд░рд╕реНрд╢рдореЗрдпрд░ - рдорд┐рдердХ: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЕрдирд╛рддреЛ рддрд╛рд╡рд▓рд╛рд╕рд╛рд░реА - рд╡рд░реНрдЧ рдмрдирд╛рдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк: рдХреБрдЫ рджрд╛рд░реНрд╢рдирд┐рдХ рдФрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдЕрд╡рд▓реЛрдХрди [PDF]
рдорд╛рдЗрдХ рдПрдВрдбрд░рд╕рди - рдХрдХреНрд╖рд╛-рдЖрдзрд╛рд░рд┐рдд рдУрдУрдкреА рдкрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк-рдЖрдзрд╛рд░рд┐рдд рдУрдУрдкреА рдХреЗ рд▓рд╛рдн

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


All Articles