рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХреНрд░рдо

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


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


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

рд╣рдо рдПрдХ рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦрддреЗ рд╣реИрдВ


рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ:


 class BaseTooltip { template = 'baseTemplate' constructor(content) { this.render(content) } render(content) { console.log('render:', content, this.template) } } const tooltip = new BaseTooltip('content') // render: content baseTemplate 

рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ


рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЯреВрд▓рдЯрд┐рдк рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬрд┐рд╕рдореЗрдВ template рдлрд╝реАрд▓реНрдб рдмрджрд▓рддрд╛ рд╣реИ


 class SpecialTooltip extends BaseTooltip { template = 'otherTemplate' } 

рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рдиреЗ рдореБрдЭреЗ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ


 const specialTooltip = new SpecialTooltip('otherContent') // render: otherContent baseTemplate // ^  

рд░реЗрдВрдбрд░ рдореЗрдердб рдХреЛ BaseTooltip.prototype.template рд╕рд╛рде BaseTooltip.prototype.template рдЧрдпрд╛ рдерд╛, рди рдХрд┐ SpecialTooltip.prototype.template , рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереАред


рд╣рдо рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦрддреЗ рд╣реИрдВ, рд╢реВрдЯрд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ


рдЪреВрдВрдХрд┐ рдХреНрд░реЛрдо DevTools рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдХреИрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдПрдХ рдЫреЛрдЯреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдХреНрд╖рдг рдХреЛ рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВ


 function logAndReturn(value) { console.log(`set property=${value}`) return value } class BaseTooltip { template = logAndReturn('baseTemplate') constructor(content) { console.log(`call constructor with property=${this.template}`) this.render(content) } render(content) { console.log(content, this.template) } } const tooltip = new BaseTooltip('content') // set property=baseTemplate // called constructor BaseTooltip with property=baseTemplate // render: content baseTemplate 

рдФрд░ рдЬрдм рд╣рдо рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдЬреАрдм рдорд┐рд▓рддреЗ рд╣реИрдВ:


 class SpecialTooltip extends BaseTooltip { template = logAndReturn('otherTemplate') } const tooltip = new SpecialTooltip('content') // set property=baseTemplate // called constructor SpecialTooltip with property=baseTemplate // render: content baseTemplate // set property=otherTemplate 

рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкрд╣рд▓реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╛рдХреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдкреЗрдЪреАрджрд╛ рд╣реИред


рд╣рдо рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦрддреЗ рд╣реИрдВ, рдбрдВрдард▓ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ


рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБ рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ


 class BaseTooltip { template = logAndReturn('baseTemplate') constructor(content, options) { this.options = logAndReturn(options) // <---   console.log(`called constructor ${this.constructor.name} with property=${this.template}`) this.render(content) } render(content) { console.log(content, this.template, this.options) // <---   } } class SpecialTooltip extends BaseTooltip { template = logAndReturn('otherTemplate') } const tooltip = new SpecialTooltip('content', 'someOptions') //    : // set property=baseTemplate // set property=someOptions // called constructor SpecialTooltip with property=baseTemplate // render: content baseTemplate someOptions // set property=otherTemplate 

рдФрд░ рдХреЗрд╡рд▓ рдбрд┐рдмрдЧ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ (рдареАрдХ рд╣реИ, рдЕрд▓рд░реНрдЯ рдирд╣реАрдВ) рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛


рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдИ:

рдкрд╣рд▓реЗ, рдЗрд╕ рдХреЛрдб рдХреЛ рдореИрд░рд┐рдпрдиреЗрдЯ рдврд╛рдВрдЪреЗ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрд╛ (рд╕рд╢рд░реНрдд)


 const BaseTooltip = Marionette.Object.extend({ template: 'baseTemplate', initialize(content) { this.render(content) }, render(content) { console.log(content, this.template) }, }) const SpecialTooltip = BaseTooltip.extend({ template: 'otherTemplate' }) 

Marionette рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рдм рдХреБрдЫ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрдореНрдореАрдж рдХрд┐рдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреН, render рд╡рд┐рдзрд┐ рдХреЛ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ template рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрдм рдИрдПрд╕ 6 рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рддрд░реНрдХ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдирд┐рдХрд▓ рдЧрдИ


рдзрдХреНрдХреЛрдВ рдХреА рдЧрд┐рдирддреА рдХрд░реЛ


рдкрд░рд┐рдгрд╛рдо:


рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рдХреНрд░рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:


  • рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛ рдХреА рдШреЛрд╖рдгрд╛ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдЖрд░рдореНрдн рдХрд░рдирд╛
  • рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╢реНрд░реЗрдгреА рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди (рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдЦреЗрддреЛрдВ рдХрд╛ рдЖрд░рдВрдн рд╕рд╣рд┐рдд)
  • рдЗрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рд╕реЗ рд╡рд╕реНрддреБ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн
  • рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛

рд╣рдо рд░реЗрдХ рдХреЛ рдЦрд▓рд┐рд╣рд╛рди рдореЗрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ


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


рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд░рд╣реЗрдЧрд╛ред

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


All Articles