JavaScript рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдкреИрдЯрд░реНрди рдмрдирд╛рдирд╛

рд╣рд╛рдп, рд╣реЗрдмреНрд░!
рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рд╣рдм рдкрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреЛрдИ рд╡рд┐рд╕реНрддреГрдд рд▓реЗрдЦ рдирд╣реАрдВ рдерд╛, рдЬрд┐рд╕рдиреЗ рддреБрд░рдВрдд рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рдореБрдЦ рдЕрдиреНрдпрд╛рдп рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред

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


рдПрдХрд╛рдХреА рд╡рд╕реНрддреБ


рдпрджрд┐ рдХрд╛рд░реНрдп рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдерд╛, рддреЛ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдХреБрдЫ рд╣реЛрдЧрд╛: рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП javaScript рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

var app = { property1: 'value', property2: 'value', ... method1: function () { ... }, ... } 


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

 function SomeFunction () { if (typeof (SomeFunction.instance) == 'object') { return SomeFunction.instance; } this.property1 = 'value'; this.property2 = 'value'; SomeFunction.instance = this; return this; } SomeFunction.prototype.method1 = function () { } 


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

 var someObj = new SomeFunction (); 


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

 function SomeFunction () { var instance; SomeFunction = function () { return instance; } this.property1 = 'value'; this.property2 = 'value'; instance = this; } 


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

 function SomeFunction () { var instance; SomeFunction = function () { return instance; } SomeFunction.prototype = this; instance = new SomeFunction (); instance.constructor = SomeFunction; instance.property1 = 'value'; instance.property2 = 'value'; return instance; } 


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

 define([], function () { var instance = null; function SomeFunction() { if (instance) { return instance; } this.property1 = 'value'; this.property2 = 'value'; instance = this; }; return SomeFunction; }); 


рдлреИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐


рдХрд╛рд░рдЦрд╛рдиреЗ рд╡рд┐рдзрд┐ рдХреЗ рджреЛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╣реИрдВ:
1) рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ
2) рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдЖрд░рдВрднреАрдХрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдВ
рдлреИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 function Foo () { //... } function Bar () { //... } function factory (type) { switch (type) { case 'foo': return new Foo(); case 'bar': return new Bar(); } } 


рддрджрдиреБрд╕рд╛рд░, рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 foo = factory('foo'); bar = factory('bar'); 


рдЖрдк рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 function PetFactory() { }; PetFactory.register = function(name, PetConstructor) { if (name instanceof Function) { PetConstructor = name; name = null; } if (!(PetConstructor instanceof Function)) { throw { name: 'Error', message: 'PetConstructor is not function' } } this[name || PetConstructor.name] = PetConstructor; }; PetFactory.create = function(petName) { var PetConstructor = this[petName]; if (!(PetConstructor instanceof Function)) { throw { name: 'Error', message: 'constructor "' + petName + '" undefined' } } return new PetConstructor(); }; 


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЦреБрдж рдХреЛ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░рдЦрд╛рдиреЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

 PetFactory.register('dog', function() { this.say = function () { console.log('gav'); } }); 


рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╛ рдЙрд╕ рддрд░рд╣:

 function Cat() { } Cat.prototype.say = function () { console.log('meow'); } PetFactory.register(Cat); 


рд╕рд╛рд░ рдХрд╛рд░рдЦрд╛рдирд╛


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

 function BluePopup () { //   } BluePopup.prototype.attach = function (elemens) { //  ui-   } BluePopupFactory.register('popup', BluePopup); function BluePopupButton () { //      } BluePopupButton.prototype.setText = function (text) { //    } BluePopupFactory.register('button', BluePopupButton); function BluePopupTitle () { //     } BluePopupTitle.prototype.setText = function (text) { //   } BluePopupFactory.register('title', BluePopupTitle); 


рд╕рдВрднрд╡рддрдГ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

 function UI () { //,   ui- } 


рдФрд░ рд╣рдо createPopup рд╡рд┐рдзрд┐ рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:

 UI.createPopup = function (factory) { var popup = factory.create('popup'), buttonOk = factory.create('button'), buttonCancel = factory.create('button'), title = factory.create('title'); buttonOk.setText('OK'); buttonCancel.setText('Cancel'); title.setText('Untitled'); popup.attach([buttonOk, buttonCancel, title]); } 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ createPopup рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рдкреЙрдкрдЕрдк рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдмрдЯрди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИред
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 var newPopup = UI.createPopup(BluePopupFactory); 


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

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


All Articles