рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдИ рдЕрдиреНрдп "рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб" рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡рд░реНрдЧ рдирд╣реАрдВред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЪреЗрди рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рддрд░рдХреАрдмреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреЗрд╢реЗрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдкрд╛рда рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╛ рдПрдкреАрд╕реЛрдбрд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рд╕рд░рд▓ "рд╕рдВрд░рдЪрдирд╛рддреНрдордХ" рд╕реЗ, рд╕реА рдореЗрдВ, рдЕрдзрд┐рдХ "рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб" рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реА ++ / рд╕реА # / рдЬрд╛рд╡рд╛ рдореЗрдВред
рд▓реЗрдЦ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рджреЛрдиреЛрдВ, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдмреИрдХреЗрдВрдб рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдХрднреА-рдХрднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
C рдФрд░ C ++ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдХреНрд▓рд╛рд╕реЗрд╕
рд╡рд╕реНрддреБрдПрдБ рдРрд╕реА рд╕рдВрд╕реНрдерд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╣реИ
- рдкрд╣рдЪрд╛рди (рдкрд╣рдЪрд╛рди, рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛),
- рд░рд╛рдЬреНрдп (рд░рд╛рдЬреНрдп, рдЧреБрдг, рдХреНрд╖реЗрддреНрд░),
- рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ (рд╡реНрдпрд╡рд╣рд╛рд░, рддрд░реАрдХреЗ, рдХрд╛рд░реНрдп рдЬреЛ рд░рд╛рдЬреНрдп рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ)ред
рд╡рд┐рд╖рдп рдХреА рд╢реБрд░реВрдЖрдд рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрд╕реА "рд╡рд░реНрдЧ" рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдореЗрдореЛрд░реА рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЬреАрд╡рди рдХреЗ рджреМрд░рд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
C рдФрд░ C ++ рдореЗрдВ рд╕рд╢рд░реНрдд рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
- рд╕реА
struct Person { char *firstName; char *lastName; int yearOfBirth; }
- рд╕реА ++
class Person { char *firstName; char *lastName; int yearOfBirth; void computeAge(int currentYear); void setLastName(char *newLastName); }
рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдордиреЗ C рдФрд░ C ++ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐ рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред "рдПрдХ рд╡рд╕реНрддреБ рдирд╣реАрдВ рдмрдирд╛рдИ", рд▓реЗрдХрд┐рди "рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛", рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛ рд╕рдХреЗрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред
C рдФрд░ C ++ рдореЗрдВ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЗ рднреА рджреЗрдЦреЗрдВ:
- рд╕реА
struct Person *p = malloc(sizeof(*p)); setLastName(p, "Poupkine"); printf("Person's age is %d\n", computeAge(p, 2013));
- рд╕реА ++
Person *p = new Person; p->setLastName("Poupkine"); printf("Person's age is %d\n", p->computeAge(2013));
рдпреЗ рджреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рд╡реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ
setLastName
,
setLastName
(рд╡реНрдпрд╡рд╣рд╛рд░) рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ (рд░рд╛рдЬреНрдп) рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдпрд╛
setLastName
рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реИрдВред рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдордп p (рдкрд╣рдЪрд╛рди) рд╕реВрдЪрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдПрдХ рдФрд░
Person *m = new Person
рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирдИ рд╡рд╕реНрддреБ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ m рд╕реВрдЪрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреЙрдЗрдВрдЯрд░реНрд╕ p рдФрд░ m рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛, рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде, рд╕рдорд╛рди рддрд░реАрдХреЛрдВ (рд╡реНрдпрд╡рд╣рд╛рд░) рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рдеред
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛рдУрдВ рд╕реА рдФрд░ рд╕реА ++ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХрд┐рд╕реА
struct Person
рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рджреЛрд╕реНрддрд╛рдирд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрддрд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рджреЛрдиреЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдПрдХ рд╣реА
class Person
рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рд▓реЛрдЧ C ++ рдФрд░ "рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдЕрдкреНрд░реЛрдЪ" рдХреЛ рдХреНрдпреЛрдВ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо C рдореЗрдВ "рдмрд┐рдирд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ", рдФрд░ C ++ рдореЗрдВ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдЙрддреНрддрд░ рд╣реИрдВ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдЦрдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк C рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ C ++ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдиреЗрдорд╕реНрдкреЗрд╕ (рдирд╛рдорд╕реНрдерд╛рди)ред рд╕реА рд╡реЗрд░рд┐рдПрдВрдЯ рдореЗрдВ, рд╣рдордиреЗ рдХрдореНрдкреНрдпреВрдЯреЗрдЬ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ: рдпрд╣ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП "рджреГрд╢реНрдпрдорд╛рди" рд╣реИред рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░, рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рдЕрдм рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдПрдХ рдирдИ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ, рдкреЛрдиреА, рдФрд░ рд╣рдо рдПрдХ рд╕рдорд╛рди рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЯрдЯреНрдЯреВ рдХреА рдЙрдореНрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ? рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ ponyComputeAge () рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХрд░реВрдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреА рдкрджреНрдзрддрд┐ рдХрд╛ рднреА рдирд╛рдо рдмрджрд▓реЗрдВ: personComputeAge ()ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдирд╛рдорд╕реНрдерд╛рди рдХреЛ "рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд" рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ ComputeAge () рдлрд╝рдВрдХреНрд╢рди рдХреЛ C ++ рдХреА рддрд░рд╣ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХрдИ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
- рдЬрд╛рдирдХрд╛рд░реА рдЫрд┐рдкрд╛рдирд╛ред рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдкреА рд╣реИ, рд╡рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рднреА рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк p-> yearOfBirth ++ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдХрд░рдирд╛ - рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдордирдорд╛рдиреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрджрд▓рдирд╛ - рдмреБрд░рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдЕрдХреНрд╕рд░ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд╕реНрддреБ рдХреЗ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рднреАред рдФрд░ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рд╡рд┐рдзрд┐) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреМрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕рд▓рд┐рдП, рдмрджрд▓рддреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕реАрдзреЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╕рд╛рд░реНрдердХ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реА рдореЗрдВ, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди C ++ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдирд┐рдЬреА рд╡рд╕реНрддреБ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реА рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
class Person {
- рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдБред рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдореНрд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╣рдо
ponyComputeAge()
, рджреВрд╕рд░реЗ personComputeAge()
рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред C ++ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдо рдмрд╕ рдпрд╣ рдпрд╛рдж рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХреА рдЖрдпреБ рдХреА рдЧрдгрдирд╛ computeAge()
рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рдЙрдореНрд░ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ "рдХрдХреНрд╖рд╛рдУрдВ" рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред
рднреЛрд▓рд╛ рддрд░реАрдХрд╛
рдЬрдм рд╣рдо рдХрд┐рд╕реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ C рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
function createPerson(first, last, born) { var person = { firstName: first, lastName: last, yearOfBirth: born }; return person; } function computeAge(p, currentYear) { return currentYear - p.yearOfBirth; } function setLastName(p, newLastName) { p.lastName = newLastName; }
node
рдХреЛрдб рдореЗрдВ рдЗрд╕ рд╕рднреА рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ (
Node.JS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░реА-рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛) рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реИред
рд╣рдо рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдХрдЪрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ
рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реА рд╡реЗрд░рд┐рдПрдВрдЯ рдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ "рдЕрдВрджрд░"
setLastName()
рдФрд░
setLastName()
computeAge()
рддрд░реАрдХреЛрдВ "рдмрдВрдж" рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди "рдЕрдирд▓реЛрдб" рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ:
function createPerson(first, last, born) { var computeAgeMethod = function(p, currentYear) { return currentYear - p.yearOfBirth; } var setLastNameMethod = function(p, newLastName) { p.lastName = newLastName; } var person = { firstName: first, lastName: last, yearOfBirth: born, computeAge: computeAgeMethod, setLastName: setLastNameMethod }; return person; }
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдХреЗрд╡рд▓ рдмрд╛рд╣рд░ рдХреЗ
createPerson
рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдВрджрд░ рдХреА рдУрд░
createPerson
ред рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдирд╣реАрдВ рдмрджрд▓реА рдЧрдИ рд╣реИред рдпрд╣реА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рдПрдХ рддрд░реНрдХ
p
рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ: рд╣рд╛рдБ, рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди
computeAge
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ
p.computeAge
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐
p
рдкрд╣рд▓реЗ рддрд░реНрдХ рд╣реЛрдЧрд╛ред
рдпрд╣ рдмрд╣реБрдд рдмреЗрдорд╛рдиреА рд╣реИред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: рдЬреИрд╕реЗ рдХрд┐ C ++, Java рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░ рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ (
f()
) рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЪрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдпрд╣
window
рд╣реЛрдЧрд╛) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ, (
pf()
) рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдмрд╣реБрдд рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ p рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдЕрднреА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ (
p.computeAge
) рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдВрдЧреЗ, рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ
this
рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдЧрд╛ рдФрд░ рд╕рд╣реА рдореВрд▓реНрдп
p
рд╕реЗрдЯ рд╣реЛрдЧрд╛ред рдЗрд╕ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред рдЗрд╕реЗ рднреА
node
рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
function createPerson(first, last, born) { var computeAgeMethod = function(currentYear) { return currentYear - this.yearOfBirth; } var setLastNameMethod = function(newLastName) { this.lastName = newLastName; } var person = { firstName: first, lastName: last, yearOfBirth: born, computeAge: computeAgeMethod, setLastName: setLastNameMethod }; return person; }

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
рдкрд░рд┐рдгрд╛рдореА
createPerson
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рдореНрди рджреЛрд╖ рд╣реИ: рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рд░ рдмрд╛рд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ
createPerson
рдмрд╣реБрдд рд╕рд╛рд░реА рдореЗрдореЛрд░реА рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░
createPerson
рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
createPerson
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдВрдкреНрдпреВрдЯ рдФрд░ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐LastName рдлрд╝реАрд▓реНрдбред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рди рдмрдирд╛рдпрд╛ рдЬрд╛рдП? рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рд╡рд╕реНрддреБ рдореЗрдВ рдХреЛрдИ
setLastName
рдФрд░
setLastName
рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди
person.computeAge()
рдФрд░
person.setLastName()
рддрд░реАрдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ?
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ "рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк" рдирд╛рдордХ рдПрдХ рддрдВрддреНрд░ рд╣реИ, рдпрд╛ рдмрд▓реНрдХрд┐ "рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЪреЗрди" рд╣реИред рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдпрд╛ рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬрди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдлрд╝реАрд▓реНрдб рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕реА рддрд░рд╣ред
node
рдХреЛрдб рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ
node
рдХреЙрдкреА рдХрд░рдХреЗ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
var obj1 = { "a": "aVar" }; var obj2 = { "b": "bVar" }; obj1 obj2 obj2.a obj2.b obj2.__proto__ = obj1; obj1 obj2 obj2.a obj2.b

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐
obj2
рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
obj1
, рддреЛ
obj2
"
obj1
рдХреЗ рдЧреБрдг" рдЬреИрд╕реЗ "рдлрд╝реАрд▓реНрдб" a "рдорд╛рди рдХреЗ рд╕рд╛рде" aVar "" рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп,
obj2
рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ "рдП" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдЧреАред
рдЗрд╕рд▓рд┐рдП, рдЖрдк рдПрдХ рдмрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░
createPerson
рдХрдиреНрд╡рд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ:
function createPerson(first, last, born) { var person = { firstName: first, lastName: last, yearOfBirth: born }; person.__proto__ = personPrototype; return person; } var personPrototype = { "computeAge": function(currentYear) { return currentYear - this.yearOfBirth; },
node
рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреМрди рд╕реА рд╕рд░рд▓ рд╡рд╕реНрддреБ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛,
console.log(p)
рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдЦрд╛рдИ рдЬрд╛рддреА рд╣реИред рдФрд░ рд╡рд╣ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдЕрднреА рднреА рдЗрд╕ рд╕рд░рд▓ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИред
рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рджреЛ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред рдкрд╣рд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖
__proto__
рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрд╣реБрдд рдирдИ рд╣реИ, рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рджреВрд╕рд░реА рдЦрд╛рдореА рдпрд╣ рд╣реИ рдХрд┐
setLastName
рдФрд░
setLastName
рд╕рд╛рде рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ
personPrototype
рдХрд░рдиреЗ рд╕реЗ
personPrototype
рдмрд╛рдж рднреА
setLastName
рд╣рдордиреЗ рдЕрднреА рднреА рдЗрд╕реЗ
personPrototype
рдирд╛рдо рдХреЗ рд╕рд╛рде
personPrototype
ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ, рдЬреЛ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдФрд░ рд╕рдВрдЧрдд рд╣реИред
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд┐рд░реНрдл рдирд╛рдо
f()
, рдмрд▓реНрдХрд┐
new f()
(C ++ рдпрд╛ Java рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдХреЗ) рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рджреЛ рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВ:
- рдПрдХ рдирдпрд╛ рдЦрд╛рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ {} рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, f()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, this
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ; рдЕрд░реНрдерд╛рддреН, рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдЬрд╣рд╛рдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ window
рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдпрд╛ Node.JS рдореЗрдВ global
рд╣реИред
var f = function() { console.log(this); }; f()
рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ pf()
рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ new f()
рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рддрд╛рдЬрд╝рд╛ рдЦрд╛рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ {}
рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ this
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рдиреЛрдб рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
var f = function() { }; console.log({ "a": "this is an object", "f": f }.f()); console.log(new f());
- рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖
.prototype
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ .prototype
рд╡рд┐рд╢реЗрд╖рддрд╛ .prototype
рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ .prototype
1 рд╕реЗ рдирдП рдмрдирд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрди рдЬрд╛рдПрдЧрд╛ред
node
рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
var fooProto = { "foo": "prototype!" }; var f = function() { }; (new f()).foo
рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╕реБрдкрд░рдиреЛрд╡рд╛
__proto__
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ createPerson рдХреЛрдб рдЗрд╕ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рдХреИрд╕реЗ рд╣реИ:
function createPerson(first, last, born) { this.firstName = first; this.lastName = last; this.yearOfBirth = born; } createPerson.prototype = { "computeAge": function(currentYear) { return currentYear - this.yearOfBirth; },
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╣рд▓реБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
- рд╣рдо createPerson рдХреЗ рдмрдЬрд╛рдп рдирдП createPerson рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ;
- рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдПрдХ рдмрд╛рд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо createPerson рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ;
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдкреВрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ
createPerson.prototype
рдкреЙрдЗрдВрдЯреНрд╕
createPerson.prototype
, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдЕрд▓рдЧ рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рдореБрд╣рд╛рд╡рд░рд╛ рдФрджреНрдпреЛрдЧрд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рднреА рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
createPerson.prototype.computeAge = function(currentYear) { return currentYear - this.yearOfBirth; } createPerson.prototype.setLastName = function(newLastName) { this.lastName = newLastName; }
рдПрдХ jQuery рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рдЬреЛрдбрд╝рдирд╛
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
createPerson
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИ
function createPerson(first, last, born) { var person = { firstName: first, lastName: last, yearOfBirth: born }; return person; }
this
рдореЗрдВ рд╣реЗрд░рдлреЗрд░
this
рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рдХреНрд░рдо рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛:
function createPerson(first, last, born) { this.firstName = first; this.lastName = last; this.yearOfBirth = born; }
рддрд░реНрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (
first
,
last
) рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (
firstName
,
last
) рдХреА рдпрд╣ рдореИрдиреБрдЕрд▓ рдЖрд░рдВрднреАрдХрд░рдг рдмрд╣реБрдд рдХрдо рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреБрдХреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рдФрд░ рд╢рд╛рдЦрд╛рддреНрдордХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдореИрдиреБрдЕрд▓ рдЧрдгрдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХреНрд░рд┐рдпрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо
jQuery.extend рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рджреВрд╕рд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ:
function createPerson(first, last, born) { var person = { firstName: first, lastName: last, yearOfBirth: born }); $.extend(this, person); }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░реЗрдВ:
function createPerson(person) { $.extend(this, person); } var p = new createPerson({ firstName: "Anne", lastName: "Hathaway", yearOfBirth: 1982 }); console.log(p);
(рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
jQuery
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдХреЛрдб рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ, рдФрд░
node
рд╕рд╛рде рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИред)
рдпрд╣ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░рд▓ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рджрд┐рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо тАЬрдирдпрд╛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛тАЭ рдХреНрдпреЛрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ? рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдирд╛рдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:
function Person(person) { $.extend(this, person); } Person.prototype.computeAge = function(currentYear) { return currentYear - this.yearOfBirth; } Person.prototype.setLastName = function(newLastName) { this.lastName = newLastName; } var anne = new Person({ firstName: "Anne", lastName: "Wojcicki", yearOfBirth: 1973 }); var sergey = new Person({ firstName: "Sergey", lastName: "Brin", yearOfBirth: 1973 }); console.log(anne); console.log(sergey);
рдпрд╣рд╛рдБ рдпрд╣ рд╕рдлрд╛рд░реА рдпрд╛ рдХреНрд░реЛрдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

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