рдЖрдЬ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЗрдПрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХрд╛рдо рдерд╛, рдФрд░ рдореБрдЭреЗ рднрд╛рд╖рд╛ рдХреА рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд╛рдордиреЗ рдЖрдИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡ рдХреЗ 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')
рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ
рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЯреВрд▓рдЯрд┐рдк рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬрд┐рд╕рдореЗрдВ template
рдлрд╝реАрд▓реНрдб рдмрджрд▓рддрд╛ рд╣реИ
class SpecialTooltip extends BaseTooltip { template = 'otherTemplate' }
рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рдиреЗ рдореБрдЭреЗ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ
const specialTooltip = new SpecialTooltip('otherContent')
рд░реЗрдВрдбрд░ рдореЗрдердб рдХреЛ 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')
рдФрд░ рдЬрдм рд╣рдо рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдЬреАрдм рдорд┐рд▓рддреЗ рд╣реИрдВ:
class SpecialTooltip extends BaseTooltip { template = logAndReturn('otherTemplate') } const tooltip = new SpecialTooltip('content')
рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкрд╣рд▓реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╛рдХреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдкреЗрдЪреАрджрд╛ рд╣реИред
рд╣рдо рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦрддреЗ рд╣реИрдВ, рдбрдВрдард▓ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБ рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ
class BaseTooltip { template = logAndReturn('baseTemplate') constructor(content, options) { this.options = logAndReturn(options)
рдФрд░ рдХреЗрд╡рд▓ рдбрд┐рдмрдЧ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ (рдареАрдХ рд╣реИ, рдЕрд▓рд░реНрдЯ рдирд╣реАрдВ) рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдИ:рдкрд╣рд▓реЗ, рдЗрд╕ рдХреЛрдб рдХреЛ рдореИрд░рд┐рдпрдиреЗрдЯ рдврд╛рдВрдЪреЗ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрд╛ (рд╕рд╢рд░реНрдд)
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 рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рддрд░реНрдХ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдирд┐рдХрд▓ рдЧрдИ
рдзрдХреНрдХреЛрдВ рдХреА рдЧрд┐рдирддреА рдХрд░реЛ
рдкрд░рд┐рдгрд╛рдо:
рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рдХреНрд░рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
- рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛ рдХреА рдШреЛрд╖рдгрд╛ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдЖрд░рдореНрдн рдХрд░рдирд╛
- рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╢реНрд░реЗрдгреА рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди (рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдЦреЗрддреЛрдВ рдХрд╛ рдЖрд░рдВрдн рд╕рд╣рд┐рдд)
- рдЗрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рд╕реЗ рд╡рд╕реНрддреБ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн
- рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛
рд╣рдо рд░реЗрдХ рдХреЛ рдЦрд▓рд┐рд╣рд╛рди рдореЗрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рдпрд╛ рддреЛ рдорд┐рд╢реНрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЧрдВрджрд╛ рддрд░реАрдХрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд░рд╣реЗрдЧрд╛ред