рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рдХрдо рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ "рдорд┐рд╢реНрд░рдг" рд░рдгрдиреАрддрд┐, рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред рдореИрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рддрдХрдиреАрдХ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред (рдЗрд╕ рдкреЛрд╕реНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХреЛрдб рдХреА
рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╢рд╛рдирджрд╛рд░
@kitcambridge рдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!)
рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдпрд╣ рдЧреБрдг рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛрдб рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИрдВ: рдПрдХ рдПрдХрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЙрджрд╛рд╣рд░рдг рдХрдИ рдЕрдирдВрдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рднреА рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдПрдВ рдмрдирддреА рд╣реИрдВ рдЬреЛ рдЬрд╛рд╡рд╛ рдпрд╛ C ++ рдЬреИрд╕реА "рд╡рд░реНрдЧ" рднрд╛рд╖рд╛рдУрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рджреЛрд╣рд░рд╛рддреА рд╣реИрдВред рдорд▓реНрдЯреАрд╕реНрдЯреЛрд░реА рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрднреА-рдХрднреА рдЪреАрдЬреЛрдВ рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░реЗрд░рдгрд╛ рд╣реИ, рддреЛ рдРрд╕реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдЬрд▓реНрджреА рд╕реЗ рдЕрд░реНрдерд╣реАрди рдЙрдкрд╡рд░реНрдЧреЛрдВ, рдЯрд╛рдпрд░реЛрдВ рдХреЗ рдЕрддрд┐рд░реЗрдХ рдФрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рддрд░реНрдХ рдХреЗ рдореБрдбрд╝ рд▓реЗрдмрд┐рд░рд┐рдВрде рдмрди рд╕рдХрддреЗ рд╣реИрдВ ("рдПрдХ рдмрдЯрди рдПрдХ рдЖрдпрдд рдпрд╛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ? рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реИ?)
Rectangle
рд╕реЗ
Button
рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░
Rectangle
рдХреЛ
Control
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ... рдЗрд╕рд▓рд┐рдП, рд░реЛрдХреЗрдВ ... ")ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЬрдм рдпрд╣ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдХрдареЛрд░рддрд╛ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд┐рд╕реА рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд╛рд░реНрдп рдХреЛ рд╡рдВрд╢рд╛рд╡рд▓реА рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд╕реАрдзрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИ; рдХрд┐рд╕реА рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд╕реАрдзреЗ
call
рдпрд╛
apply
рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рднрд╛рд╡реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдЗрддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА рдпрд╣ рдХреЛрдб рдХреЗ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЕрдиреБрд╢рд╛рд╕рди рдХреЗ рдЦрд┐рд▓рд╛рдл рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдереЛрдбрд╝рд╛ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрд╢реБрджреНрдзрддрд╛рдПрдВ рдПрдХ рдорд╣рд╛рди рд╕рдордЭреМрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдиреНрдпреВрдирддрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдХрд╛рдЗрдпреЛрдВ рддрдХ рдЙрдзрд╛рд░ рд▓реЗрдиреЗ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд╡рд┐рд░рд╛рд╕рдд рдХреА рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╢рдХреНрддрд┐ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБ-рдХрд╣рд╛рдиреА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореВрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВред
рдореВрд▓ рдмрд╛рддреЗрдВ
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдПрдХ рдкреНрд░рд╡реЗрд╢ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Person
,
Circle
,
Observer
)ред рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдЕрдореВрд░реНрдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдирдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдирдХрд▓ (рдпрд╛ "рдЙрдзрд╛рд░") рдХреА рдЬрд╛рддреА рд╣реИред
рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИред рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд╕реНрддреБрдУрдВ (рдЙрджрд╛рд╣рд░рдгреЛрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИ: рд╣рдорд╛рд░реА рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, "рдорд┐рд╢реНрд░рдг" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рдмрди рдЬрд╛рддреА рд╣реИ рд╕реНрдкрд╖реНрдЯред
рдХреЗ рдЙрдкрдпреЛрдЧ
рдореИрдВ рдХрдИ рдЕрд╢реБрджреНрдзрддрд╛ рддрдХрдиреАрдХ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдПрдХрд▓ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ: рдЧреЛрд▓, рдЕрдВрдбрд╛рдХрд╛рд░ рдпрд╛ рдЖрдпрддрд╛рдХрд╛рд░ рдмрдЯрди рдмрдирд╛рдирд╛ред рдпрд╣рд╛рдВ рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рдЖрд░реЗрдЦ (рдирд╡реАрдирддрдо рд╣рд╛рдИ-рдЯреЗрдХ рдЧреИрдЬреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛) рд╣реИред рдЖрдпрддреЛрдВ рдореЗрдВ - рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ, рд╣рд▓рдХреЛрдВ рдореЗрдВ - рдкреВрд░реНрдг рдмрдЯрдиред

1. рдХреНрд▓рд╛рд╕рд┐рдХ рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ
"рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд╢реНрд░рдг" рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ Google рдХреЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рджреЛ рдкреГрд╖реНрдареЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЗрдЦрдХ рдЕрд╢реБрджреНрдзрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдареЛрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рдеред рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкреНрд░рдЧрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ - рдкрд╣рд▓реЗ рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдВ рдХрдХреНрд╖рд╛рдПрдВ рдереАрдВ, рдФрд░ рдпрд╣ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реИ рдЬреЛ рдЬреЗрдПрд╕ рдореЗрдВ рд╣реИрдВред рдпрд╣рд╛рдБ рдЗрд╕ рд╢реИрд▓реА рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдПрдХ рд╡реГрддреНрдд рдХрд╛ рдПрдХ рдорд┐рд╢реНрд░рдг рд╣реИ:
var Circle = function() {}; Circle.prototype = { area: function() { return Math.PI * this.radius * this.radius; }, grow: function() { this.radius++; }, shrink: function() { this.radius--; } };
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреА рднрд╛рд░реА рдЕрд╢реБрджреНрдзрддрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
var circleFns = { area: function() { return Math.PI * this.radius * this.radius; }, grow: function() { this.radius++; }, shrink: function() { this.radius--; } };
рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ
рдЗрд╕ рддрд░рд╣ рдХреА рдЕрд╢реБрджреНрдзрддрд╛ рд╡рд╕реНрддреБ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдорд┐рд▓рддреА рд╣реИ?
extend
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХрднреА-рдХрднреА
augment
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рддрд┐рдпреЛрдВ рдХрд╛
extend
рд╣реЛрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдХреНрд▓реЛрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдПрдХ рддреНрд╡рд░рд┐рдд рд╕рдореАрдХреНрд╖рд╛ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХреБрдЫ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡ рджрд┐рдЦрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Prototyp.js
hasOwnProperty
check рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ (рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрд╢реБрджреНрдзрддрд╛ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЧреБрдгрд╛рдВрдХ рдЧреБрдг рдирд╣реАрдВ рд╣реИрдВ), рдЬрдмрдХрд┐ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдк рдЕрд╢реБрджреНрдзрддрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рдХреЗрд╡рд▓ рдЧреБрдг рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд▓рдЪреАрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ ...
function extend(destination, source) { for (var k in source) { if (source.hasOwnProperty(k)) { destination[k] = source[k]; } } return destination; }
... рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...
var RoundButton = function(radius, label) { this.radius = radius; this.label = label; }; extend(RoundButton.prototype, circleFns); extend(RoundButton.prototype, buttonFns);
2. рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ
рдпрджрд┐ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИрдВ, рддреЛ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдП? рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрд╢реБрджреНрдзрддрд╛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╡рд╕реНрддреБ рдирд╣реАрдВред рд╣рдорд╛рд░реА рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд╕реНрддреБрдПрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреБрдж рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред рдпрд╣ рдПрдХ рдордзреНрдпрд╕реНрде рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ - рдХрд╛рд░реНрдпреЛрдВ рдХрд╛
extend
рдХрд░реЗрдВред
var asCircle = function() { this.area = function() { return Math.PI * this.radius * this.radius; }; this.grow = function() { this.radius++; }; this.shrink = function() { this.radius--; }; return this; }; var Circle = function(radius) { this.radius = radius; }; asCircle.call(Circle.prototype); var circle1 = new Circle(5); circle1.area();
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИред рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╢реБрджреНрдзрддрд╛, рд╕рдВрдЬреНрдЮрд╛ рдирд╣реАрдВ; рд╣рд▓реНрдХреЗ рдбрд┐рдкрд╛рд░реНрдЯрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ред рдРрд╕реА рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рдХреЛрдб рдХреА рд╢реИрд▓реА рдкреНрд░рд╛рдХреГрддрд┐рдХ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ:
this
рд╣рдореЗрд╢рд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рдЕрдореВрд░реНрдд рд╡рд╕реНрддреБ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ; рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рдЕрдирдЬрд╛рдиреЗ рдирдХрд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ (рдЬреЛ рднреА рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ) рдХрд╛рд░реНрдп рдЕрдм рдХреНрд▓реЛрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдпрд╣рд╛рдБ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рд╕рдорд╛рд░реЛрд╣ рд╣реИ:
var asButton = function() { this.hover = function(bool) { bool ? mylib.appendClass('hover') : mylib.removeClass('hover'); }; this.press = function(bool) { bool ? mylib.appendClass('pressed') : mylib.removeClass('pressed'); }; this.fire = function() { return this.action(); }; return this; };
рд╣рдо рджреЛ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЧреЛрд▓ рдмрдЯрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
var RoundButton = function(radius, label, action) { this.radius = radius; this.label = label; this.action = action; }; asButton.call(RoundButton.prototype); asCircle.call(RoundButton.prototype); var button1 = new RoundButton(4, 'yes!', function() {return 'you said yes!'}); button1.fire();
3. рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд░рдгрдиреАрддрд┐ рднреА рдЖрдкрдХреЛ рдЙрдзрд╛рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ - рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдПрдХ рддрд░реНрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ
grow
рдФрд░
shrink
рдХрд╕реНрдЯрдо рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ
asOval
рдорд┐рд╢реНрд░рдг рдмрдирд╛рдХрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
var asOval = function(options) { this.area = function() { return Math.PI * this.longRadius * this.shortRadius; }; this.ratio = function() { return this.longRadius/this.shortRadius; }; this.grow = function() { this.shortRadius += (options.growBy/this.ratio()); this.longRadius += options.growBy; }; this.shrink = function() { this.shortRadius -= (options.shrinkBy/this.ratio()); this.longRadius -= options.shrinkBy; }; return this; } var OvalButton = function(longRadius, shortRadius, label, action) { this.longRadius = longRadius; this.shortRadius = shortRadius; this.label = label; this.action = action; }; asButton.call(OvalButton.prototype); asOval.call(OvalButton.prototype, {growBy: 2, shrinkBy: 2}); var button2 = new OvalButton(3, 2, 'send', function() {return 'message sent'}); button2.area();
4. рдХреИрд╢рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ
рдЖрдк рдЪрд┐рдВрддрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣рд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
Jsperf.com рдЬреИрд╕реА рд╢рд╛рдирджрд╛рд░ рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рд╕рднреА рдЕрд╢реБрджреНрдзрддрд╛ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд▓рд┐рдпрд╛ (рдкрд░рд┐рдгрд╛рдо рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реИрдВ)ред рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдХреНрд░реЛрдо 12 рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдмреЗрд╣рддрд░ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдРрд╕реА рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рдХреНрд▓рд╛рд╕рд┐рдХ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреЛ рдмрд╛рд░ рдзреАрдорд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐ рдмрд╛рд░ рдПрдХ рдмрд╛рд░ (рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп рдирд╣реАрдВ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рдиреА рдЪрд╛рд╣рд┐рдП - рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо IE8 рдореЗрдВ рднреА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 26,000 рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ!
рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдРрд╕реА рд╕рдВрдЦреНрдпрд╛рдПрдВ рдЖрдкрдХреЗ рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд░рд╛рдд рдореЗрдВ рд╕реЛрдиреЗ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рд╣реИред рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рд░рдЦрдХрд░, рд╣рдо рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдВ рдЕрдм рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХреНрд▓рд╛рд╕рд┐рдХ рдкреНрд░рджрд░реНрд╢рди (рдХреНрд░реЛрдо рдореЗрдВ рд▓рдЧрднрдЧ 20 рдмрд╛рд░ рдФрд░ рдПрдлрдПрдл 4 рдореЗрдВ рд▓рдЧрднрдЧ 13) рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд░рд╛ рд╕рдХрддреА рд╣реИрдВред рдлрд┐рд░, рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реБрдЦрдж рдПрд╣рд╕рд╛рд╕ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ :)
рдпрд╣рд╛рдБ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЗ рд╕рд╛рде
asRectangle
рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ ...
var asRectangle = (function() { function area() { return this.length * this.width; } function grow() { this.length++, this.width++; } function shrink() { this.length--, this.width--; } return function() { this.area = area; this.grow = grow; this.shrink = shrink; return this; }; })(); var RectangularButton = function(length, width, label, action) { this.length = length; this.width = width; this.label = label; this.action = action; } asButton.call(RectangularButton.prototype); asRectangle.call(RectangularButton.prototype); var button3 = new RectangularButton(4, 2, 'delete', function() {return 'deleted'}); button3.area();
5. рджрд╣реА рдбрд╛рд▓реЗрдВ
рдЬреАрд╡рди рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рдордЭреМрддрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рд╕реБрдзрд╛рд░ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрд╢реБрджреНрдзрддрд╛ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд▓реЛрди рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреА рд╣реИ, рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЕрдм рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рдЙрдзрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреИрд╢реНрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрдпреВрд░ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрд╛рдж рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рддрдХ, рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ред рдпрд╣рд╛рдВ рдареАрдХ рд╕реЗ
asRectangle
рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде
asRectangle
рдХрд╛ рдПрдХ рдорд┐рд╢реНрд░рдг рд╣реИ рдЬреЛ
grow
рдФрд░
shrink
рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
Function.prototype.curry = function() { var fn = this; var args = [].slice.call(arguments, 0); return function() { return fn.apply(this, args.concat([].slice.call(arguments, 0))); }; } var asRectangle = (function() { function area() { return this.length * this.width; } function grow(growBy) { this.length += growBy, this.width +=growBy; } function shrink(shrinkBy) { this.length -= shrinkBy, this.width -= shrinkBy; } return function(options) { this.area = area; this.grow = grow.curry(options['growBy']); this.shrink = shrink.curry(options['shrinkBy']); return this; }; })(); asButton.call(RectangularButton.prototype); asRectangle.call(RectangularButton.prototype, {growBy: 2, shrinkBy: 2}); var button4 = new RectangularButton(2, 1, 'add', function() {return 'added'}); button4.area();
рдкреНрд░рджрд░реНрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣рд╛рдВ рддрдХрдиреАрдХреА рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ
рджрд┐рдП рдЧрдП
jsperf рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╣рдЬрд╛рд░реЛрдВ рдСрдкрд░реЗрд╢рдиреЛрдВ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рд╣реЛрдЧреА, рдЙрддрдирд╛ рд╣реА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
(рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдзреНрдпрд╛рди рджреЗрдВ: jsperf.com рдкрд░ рд╕реАрдзреЗ рд╣рд╛рд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ; рдореВрд▓ рдкреЛрд╕реНрдЯ рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреА рдЧрдИ рд╣реИ)рдирд┐рд╖реНрдХрд░реНрд╖
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд░рд╛рдЬреНрдп рдХрд╛ рдПрдХ рдорд┐рд╢реНрд░ рдзрд╛рддреБ рд╣реИред рд░рд╛рдЬреНрдп рдЖрдорддреМрд░ рдкрд░ рдЙрджрд╛рд╣рд░рдг-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрддреА рд╣реИред рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рдЗрди рджреЛ рдмреБрдирд┐рдпрд╛рджреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рд╣рд┐рдд рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдВрдЧреАред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрд╢реБрджреНрдзрддрд╛ рдкреИрдЯрд░реНрди рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрдВрддрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд╕реНрддреБрдПрдБ рдПрдХ рдЕрд╡рд╕реНрдерд╛ рд╣реИрдВ, рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдлрд╕рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЗрдбрд╝ рдкрд░ рдкрдХреЗ рдлрд▓реЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд░рдгрдиреАрддрд┐ рдХреЛ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рд╕реЗ рдмрд╣реБрдд рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдлреАрдЪрд░ рд╕реЗрдЯ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рднрдВрдбрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
var myCircle = asCircle.call({radius:25}); myCircle.area();
рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рднрд╛рдЧреНрдп, рдФрд░ рд╕реБрдзрд╛рд░ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдбрд░реЛ рдордд!