const availableTags = ['div', 'h1', 'p', 'span'];
function tagsCollector() {
this.tags = [];
this.addTag = function(tag) {
this.tags.push(tag);
}
}
class Format {
constructor() {
this.tags = new tagsCollector();
}
}
availableTags.forEach(tag => {
Object.defineProperty(Format.prototype, tag, {
value: new Proxy(text => {
return `
<${tag}>
<${this.tags.reduceRight((html, curtag) => {
return `<${curtag}>${html}</${curtag}>`;
}, text)}
</${tag}>
`
}, { get: (_, props) => {
this.tags.addTag(tag);
return this;
}})
})
})
Задача field chained HTML formatting c codewars. Нужно реализовать паттерн fluent interface типа Format.div.p('text'). Для каждого тега создаю геттер, который добавляет тег в tagCollector и возвращает текущий объект Format. Думал проксировать геттер, но тогда теряется контекст вызова и я не могу получить доступ к this.tags.