рдПрдХ рдкреИрдЯрд░реНрди рдореЗрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ 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')
- рдЬрдм
new Animal(name)
рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ __proto__
рдПрдХ __proto__
рд▓рд┐рдВрдХ Animal.prototype
(рдЖрд░реЗрдЦ рдХреЗ рджрд╛рдИрдВ рдУрд░ рджреЗрдЦреЗрдВ)ред animal.sit
рд╡рд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ animal.canWalk
рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд animal.canWalk
рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЬрд╛рдирд╡рд░ рдЕрдм рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЫрджреНрдо рд╢реНрд░реЗрдгреА рд╕реНрдХреАрдорд╛:
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
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 }
рдпрд╣рд╛рдБ рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ:
рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП new Animal
рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ
рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз, рд▓реЗрдХрд┐рди рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдЬрдм
Rabbit.prototype = inherit(Animal.prototype)
рдмрдЬрд╛рдпред
Rabbit.prototype = inherit(Animal.prototype)
рд▓реЛрдЧ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдПрдХ
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)
рдирддреАрдЬрддрди, рд╣рдо
Animal
рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА
GrassEatingAnimal
рдХреНрд▓рд╛рд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓
Animal
рдФрд░
extend(...)
рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВрдЧреЗред
рдирд┐рдЬреА рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ (рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди)
рд╕рдВрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЕрдВрдбрд░рд╕реНрдХреЛрд░ '_' рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдирд┐рдЬреА рддрд░реАрдХреЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред
рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЗ рдФрд░ рдЧреБрдг
рд╡рд┐рдзрд╛рдпрдХ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
function Animal() { Animal.count++ } Animal.count = 0 new Animal() new Animal() alert(Animal.count)
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рд╕реБрдкрд░-рдореЗрдЧрд╛-рдУрдУрдкреА рдврд╛рдВрдЪрд╛ рд╣реИ:
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 }
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
рдЖрдк рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдереЛрдбрд╝реА рд╕реА рдЪреАрдиреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ:
mixin(Animal.prototype, { run: ..., toString: ...})
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ OOP рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рджреЛ рдХрд╛рд░реНрдп рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред