рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдкреИрдЯрд░реНрди (рдмрд┐рд▓ рд╕реЙрд░ рдЯреАрдо рд╕рд╛рдЗрдХрд┐рд▓)

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдЙрд╕ рд╕рдордп рдХреЗ рдЬрд╛рдиреЗ-рдорд╛рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд┐рдХреНрд╖рдХ рдмрд┐рд▓ рд╕реЙрдЙрд░ рдиреЗ рдЬреЗрдПрд╕ рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдкреИрдЯрд░реНрди рдкрд░ рдХрдИ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдереЗред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЙрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдереЗред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЕрдиреЛрдЦрд╛ рд╕рдВрд░рдХреНрд╖рдХ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХреЛ рдЗрд╕рдХрд╛ рдкрд╛рдардХ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд▓реЗрдЦ рддрдм рд╕реЗ "рд╣рдмрд░" рдХреА рдиреАрддрд┐ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ "рдЕрдиреБрд╡рд╛рдж" рдирд╣реАрдВ рд╣реИ рдореИрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд┐рд▓ рдХреЗ рд▓реЗрдЦреЛрдВ рдиреЗ рдореБрдЭреЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

RORO


рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯреЗрдВ - рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдПрдХ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдореИрдВ рдореВрд▓ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ: рд▓рд┐рдВрдХ

рдмрд┐рд▓ рдиреЗ рд▓рд┐рдЦрд╛ рдХрд┐ рд╡рд╣ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд▓реЗрдХрд░ рдЖрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ - рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯред рд╡реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдПрдХ рд╡рд╕реНрддреБ рднреА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдмрд┐рд▓ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдкреБрдирд░реНрдЧрдарди (ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ) рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ред

рдЬреЛ рд▓реЛрдЧ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рдХрд╣рд╛рдиреА рдХреЗ рджреМрд░рд╛рди рдЖрд╡рд╢реНрдпрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреВрдВрдЧрд╛ред

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВред рд╣рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

//   const user = { name: 'John Doe', login: 'john_doe', password: 12345, active: true, rules: { finance: true, analitics: true, hr: false } }; //   const users = [user]; //,     function findUsersByRule ( rule, withContactInfo, includeInactive) { //        active const filtredUsers= users.filter(item => includeInactive ? item.rules[rule] : item.active && item.rules[rule]); //  ()   ( )     withContactInfo return withContactInfo ? filtredUsers.reduce((acc, curr) => { acc[curr.id] = curr; return acc; }, {}) : filtredUsers.map(item => item.id) } //     findUsersByRule( 'finance', true, true) 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, findUsersByRule рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдмрд╣реБрдд рд╕рдВрджрд┐рдЧреНрдз рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд┐рдЫрд▓реЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд┐рддрдиреЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рдЧрднрдЧ рдХрднреА рднреА рд╕рдВрдкрд░реНрдХ рдЬрд╛рдирдХрд╛рд░реА (withContactInfo) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рд╢рд╛рдорд┐рд▓) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ? рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рддрд╛рд░реНрдХрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдЬрдмрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдЕрдкрдиреЗ рдХреЙрд▓ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИ, рдпрд╣ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрд▓ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреА рдХрд┐ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рджреЛ рддрд╛рд░реНрдХрд┐рдХ рдорд╛рди рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреНрдпреЛрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рджреВрд╕рд░реЗ, рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

 function findUsersByRule ( role, withContactInfo, includeInactive) { if (!role) { throw Error(...) ; } //...  } 

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

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

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

 function findUsersByRule ({ rule, withContactInfo, includeInactive}) { //    } findUsersByRule({ rule: 'finance', withContactInfo: true, includeInactive: true}) 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рд▓рдЧрднрдЧ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрд╖реНрдардХ рд▓рдЧрд╛рдПрдВред рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдЕрдм рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХрд▓ рд╡рд╕реНрддреБ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ: rule , withContactInfo рдФрд░ includeInactive ред

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

рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдФрд░ рднреА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 function requiredParam (param) { const requiredParamError = new Error( `Required parameter, "${param}" is missing.` ) } function findUsersByRule ({ rule = requiredParam('rule'), withContactInfo, includeInactive} = {}) {...} 

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

JS рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо рдЖрджрд┐рдо рдХреА рд╡рд╛рдкрд╕реА рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, findUserId рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред RORO рдкреИрдЯрд░реНрди рдЙрд╕реА рдЕрдиреБрдмрдВрдз рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред

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

рдмрд░реНрдл рдХрд╛ рдХрд╛рд░рдЦрд╛рдирд╛


рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдореВрд▓ рд▓реЗрдЦ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдЦрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдЬрдореЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред

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

ES6 рд╡рд░реНрдЧ:

 // ShoppingCart.js class ShoppingCart { constructor({db}) { this.db = db } addProduct (product) { this.db.push(product) } empty () { this.db = [] } get products () { return Object .freeze([...this.db]) } removeProduct (id) { // remove a product } // other methods } // someOtherModule.js const db = [] const cart = new ShoppingCart({db}) cart.addProduct({ name: 'foo', price: 9.99 }) 

new рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░рд╕реНрдкрд░ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд╣рдо рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 const db = [] const cart = new ShoppingCart({db}) cart.addProduct = () => 'nope!' //   JS  cart.addProduct({ name: 'foo', price: 9.99 }) // output: "nope!"     

рдпрд╣ рднреА рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ JS рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдбреЗрд▓рд┐рдЧреЗрд╢рди рдкрд░ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреНрд▓рд╛рд╕ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╕рднреА рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ (рдореИрдВрдиреЗ OOP рдХреЗ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХреА рд╣реИ)ред

 const cart = new ShoppingCart({db: []}) const other = new ShoppingCart({db: []}) ShoppingCart.prototype .addProduct = () => 'nope!' //     JS cart.addProduct({ name: 'foo', price: 9.99 }) // output: "nope!" other.addProduct({ name: 'bar', price: 8.88 }) // output: "nope!" 

рд╕рд╣рдордд рд╣реВрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣рдореЗрдВ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреА рд╣реИрдВред

рдПрдХ рдЕрдиреНрдп рдЖрдо рд╕рдорд╕реНрдпрд╛ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реА рд╣реИред

 document .querySelector('#empty') .addEventListener( 'click', cart.empty ) 

рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдЯреЛрдХрд░реА рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛрдЧреАред рд╡рд┐рдзрд┐ db рдирд╛рдо рдХреЗ рд╣рдорд╛рд░реЗ рдмрдЯрди рдХреЛ рдПрдХ рдирдИ рдкреНрд░реЙрдкрд░реНрдЯреА рдЕрд╕рд╛рдЗрди рдХрд░рддреА рд╣реИ рдФрд░ рдХрд╛рд░реНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ db рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ [] рд╕реЗрдЯ рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЖрдкрдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдПрд░реЛ рдлрдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

 document .querySelector("#empty") .addEventListener( "click", () => cart.empty() ) 

рдпрд╛ рд╕рдВрджрд░реНрдн рдХреЛ рдПрдХ рдмрдВрдзрди рд╕реЗ рдмрд╛рдВрдзреЗрдВ:

 document .querySelector("#empty") .addEventListener( "click", cart.empty.bind(cart) ) 

рдЖрдЗрд╕ рдлреИрдХреНрдЯрд░реА рд╣рдореЗрдВ рдЗрди рдЬрд╛рд▓ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред

 function makeShoppingCart({ db }) { return Object.freeze({ addProduct, empty, getProducts, removeProduct, // others }) function addProduct (product) { db.push(product) } function empty () { db = [] } function getProducts () { return Object .freeze([...db]) } function removeProduct (id) { // remove a product } // other functions } // someOtherModule.js const db = [] const cart = makeShoppingCart({ db }) cart.addProduct({ name: 'foo', price: 9.99 }) 

рдЗрд╕ рдкреИрдЯрд░реНрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  • рдирдП рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  • рдЗрд╕реЗ рдмрд╛рдВрдзрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ
  • рдЧрд╛рдбрд╝реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИ
  • рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╛рд╣рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдВрдЧреЗ

 function makeThing(spec) { const secret = 'shhh!' return Object.freeze({ doStuff }) function doStuff () { //    secret } } // secret    const thing = makeThing() thing.secret // undefined 

  • рдкреИрдЯрд░реНрди рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
  • Ice Factory рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдзреАрдорд╛ рд╣реИ рдФрд░ рдПрдХ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рд▓реЗрддрд╛ рд╣реИ (рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ)
  • рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдирд┐рд╖реНрдХрд░реНрд╖


рдЬрдм рд╣рдо рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдордЭреМрддрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рд░реНрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдЦреНрдд рдирд┐рдпрдо рдФрд░ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдкреИрдЯрд░реНрди рд╣реИрдВ, рдЙрддрдиреА рд╣реА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред

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


All Articles