рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреИрдЯрд░реНрди рдЫрджреНрдо-рд╢рд╛рд╕реНрддреНрд░реАрдп (рдЫрджреНрдо-рд╢рд╛рд╕реНрддреНрд░реАрдп)

рдПрдХ рдкреИрдЯрд░реНрди рдореЗрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ Google рдХреНрд▓реЛрдЬрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреИрд╕реЗ рдЪреМрдЦрдЯреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреЗрдЯрд┐рд╡ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЫрджреНрдо рд╢реНрд░реЗрдгреА рдХреА рдШреЛрд╖рдгрд╛


Pseudo-class рд╢рдмреНрдж рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ C, Java, PHP рдЖрджрд┐ рдЬреИрд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣ рдХрдХреНрд╖рд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреИрдЯрд░реНрди рдХреНрд▓рд╛рд╕ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдХрд░реАрдм рд╣реИред

рдПрдХ рдЫрджреНрдо рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд░рдЪрдирд╛рдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Animal рдЫрджреНрдо рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ sit рд╡рд┐рдзрд┐ рдФрд░ 2 рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ:

 function Animal(name) { this.name = name } Animal.prototype = { canWalk: true, sit: function() { this.canWalk = false alert(this.name + ' sits down.') } } var animal = new Animal('Pet') // (1) alert(animal.canWalk) // true animal.sit() // (2) alert(animal.canWalk) // false 

  1. рдЬрдм new Animal(name) рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ __proto__ рдПрдХ __proto__ рд▓рд┐рдВрдХ Animal.prototype (рдЖрд░реЗрдЦ рдХреЗ рджрд╛рдИрдВ рдУрд░ рджреЗрдЦреЗрдВ)ред
  2. animal.sit рд╡рд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ animal.canWalk рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд animal.canWalk рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЬрд╛рдирд╡рд░ рдЕрдм рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЫрд╡рд┐
рдЫрджреНрдо рд╢реНрд░реЗрдгреА рд╕реНрдХреАрдорд╛:

  1. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  2. prototype рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдХрд╛ рдореВрд▓реНрдп рдХреЙрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, animal.sit() this animal рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

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


рдЪрд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ Animal рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдЖрдПрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Rabbit

 function Rabbit(name) { this.name = name } Rabbit.prototype.jump = function() { this.canWalk = true alert(this.name + ' jumps!') } var rabbit = new Rabbit('John') 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд░рдЧреЛрд╢ рдХреА Animal рдХреЗ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рд╣реИ - рдкрджреНрдзрддрд┐ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Animal рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ, рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ Rabbit.prototype.__proto__ == Animal.prototype ред рдпрд╣ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╡рд┐рдзрд┐ Rabbit.prototype рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдИ Rabbit.prototype , рддреЛ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдореВрд▓ Animal.prototype рдХреЗ рддрд░реАрдХреЛрдВ рдХреА Animal.prototype ред

рдЗрд╕ рддрд░рд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдЫрд╡рд┐

рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдПрдХ рдЦрд╛рд▓реА Rabbit.prototype рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ Rabbit.prototype рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛ рдФрд░ рдлрд┐рд░ рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗред

 function Rabbit(name) { this.name = name } Rabbit.prototype = inherit(Animal.prototype) Rabbit.prototype.jump = function() { ... } 

inherit рдирд┐рд░реНрджрд┐рд╖реНрдЯ __proto__ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ:

 function inherit(proto) { function F() {} F.prototype = proto return new F } 

рдпрд╣рд╛рдБ рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ:

 // Animal function Animal(name) { this.name = name } // Animal methods Animal.prototype = { canWalk: true, sit: function() { this.canWalk = false alert(this.name + ' sits down.') } } // Rabbit function Rabbit(name) { this.name = name } // inherit Rabbit.prototype = inherit(Animal.prototype) // Rabbit methods Rabbit.prototype.jump = function() { this.canWalk = true alert(this.name + ' jumps!') } // Usage var rabbit = new Rabbit('Sniffer') rabbit.sit() // Sniffer sits. rabbit.jump() // Sniffer jumps! 

рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП new Animal рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ


рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз, рд▓реЗрдХрд┐рди рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдЬрдм Rabbit.prototype = inherit(Animal.prototype) рдмрдЬрд╛рдпред Rabbit.prototype = inherit(Animal.prototype) рд▓реЛрдЧ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:

 // inherit from Animal Rabbit.prototype = new Animal() 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдПрдХ new Animal рдорд┐рд▓рддрд╛ рд╣реИред рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ new Animal рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ Animal.prototype рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ Animal.prototype ред

... рд▓реЗрдХрд┐рди рдХрд┐рд╕рдиреЗ рдХрд╣рд╛ рдХрд┐ new Animal() рдХреЛ рдмрд┐рдирд╛ name рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдорд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдЗрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╡реИрдЪрд╛рд░рд┐рдХ рд╣реИред рд╣рдо Animal рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗред рд╣рдо рд╕рд┐рд░реНрдл рдЙрд╕рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ Rabbit.prototype = inherit(Animal.prototype) рдмреЗрд╣рддрд░ рд╣реИред рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдиреАрдЯ рд╡рд┐рд░рд╛рд╕рддред

рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЙрд▓


рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЕрдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП Animal.apply() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 function Rabbit(name) { Animal.apply(this, arguments) } 

рдпрд╣ рдХреЛрдб Animal рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЙрджрд╛рд╣рд░рдг name рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рдзрд┐ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд (рдмрд╣реБрд░реВрдкрддрд╛)


рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдмрдЪреНрдЪреЗ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдмрджрд▓реЗрдВ:

 Rabbit.prototype.sit = function() { alert(this.name + ' sits in a rabbity way.') } 

рдЬрдм rabbit.sit() рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ rabbit -> Rabbit.prototype -> Animal.prototype рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ rabbit -> Rabbit.prototype -> Animal.prototype рдФрд░ Rabbit.prototype рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ Rabbit.prototype рдореЗрдВ рдвреВрдБрдврддрд╛ рд╣реИред

рдмреЗрд╢рдХ, рд╣рдо рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реАрдзреЗ рд╡рд╕реНрддреБ рдореЗрдВ:

 rabbit.sit = function() { alert('A special sit of this very rabbit ' + this.name) } 

рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛

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

 Rabbit.prototype.sit = function() { alert('calling superclass sit:') Animal.prototype.sit.apply(this, arguments) } 

рд╕рднреА рдореВрд▓ рддрд░реАрдХреЛрдВ рдХреЛ apply/call рд╕рд╛рде apply/call рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдХреЛ this рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Animal.prototype.sit() рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЙрд▓ this рд░реВрдк рдореЗрдВ Animal.prototype рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рдЪреАрдиреА: рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕реАрдзреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╣рдЯрд╛рдирд╛

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдзреЗ рдкреИрд░реЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рдмреБрд▓рд╛рдпрд╛ред рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ: Animal.apply... , рдпрд╛ рдПрдХ рд╡рд┐рдзрд┐: Animal.prototype.sit.apply...

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдкрд╡рд░реНрддрди рдХреЗ рджреМрд░рд╛рди, рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдордзреНрдпрд╡рд░реНрддреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдорддреМрд░ рдкрд░, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ parent.method() рдпрд╛ super() ред

рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдореЙрдбрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд┐рдирд╛ рдЕрднрд┐рднрд╛рд╡рдХ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рднреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:

 function extend(Child, Parent) { Child.prototype = inherit(Parent.prototype) Child.prototype.constructor = Child Child.parent = Parent.prototype } 

рддреЛ рдпрд╣рд╛рдБ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 function Rabbit(name) { Rabbit.parent.constructor.apply(this, arguments) // super constructor } extend(Rabbit, Animal) Rabbit.prototype.run = function() { Rabbit.parent.run.apply(this, arguments) // parent method alert("fast") } 

рдирддреАрдЬрддрди, рд╣рдо Animal рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА GrassEatingAnimal рдХреНрд▓рд╛рд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ Animal рдФрд░ extend(...) рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВрдЧреЗред

рдирд┐рдЬреА рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ (рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди)


рд╕рдВрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЕрдВрдбрд░рд╕реНрдХреЛрд░ '_' рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЫрд╡рд┐

рдирд┐рдЬреА рддрд░реАрдХреЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЗ рдФрд░ рдЧреБрдг


рд╡рд┐рдзрд╛рдпрдХ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 function Animal() { Animal.count++ } Animal.count = 0 new Animal() new Animal() alert(Animal.count) // 2 

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


рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рд╕реБрдкрд░-рдореЗрдЧрд╛-рдУрдУрдкреА рдврд╛рдВрдЪрд╛ рд╣реИ:

 function extend(Child, Parent) { Child.prototype = inherit(Parent.prototype) Child.prototype.constructor = Child Child.parent = Parent.prototype } function inherit(proto) { function F() {} F.prototype = proto return new F } 

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 // --------- the base object ------------ function Animal(name) { this.name = name } // methods Animal.prototype.run = function() { alert(this + " is running!") } Animal.prototype.toString = function() { return this.name } // --------- the child object ----------- function Rabbit(name) { Rabbit.parent.constructor.apply(this, arguments) } // inherit extend(Rabbit, Animal) // override Rabbit.prototype.run = function() { Rabbit.parent.run.apply(this) alert(this + " bounces high into the sky!") } var rabbit = new Rabbit('Jumper') rabbit.run() 

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

 mixin(Animal.prototype, { run: ..., toString: ...}) 

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ OOP рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рджреЛ рдХрд╛рд░реНрдп рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles