Пишу шаблонизатор:
class Element {
constructor(html, props, url = document.body){
this.html = html;
this.props = props;
this.url = url;
}
view(method = "insert"){
let html = getHtml(this);
if(method == "insert"){
this.url.innerHTML = html;
}
}
}
function getHtml(element){
let html = element.html;
while(html.match("{{(.*?)}}")){
let pattern = new RegExp("{{(.*?)}}");
let key = Array.from(html.match(pattern))[1];
let value = element.props[key];
if(value instanceof Element){
value = getHtml(key);
}
pattern = new RegExp(`{{${key}}}`);
html = html.replace(pattern, value);
}
return html;
}
const firstElement = new Element(`
First Element
`);
const secondElement = new Element(`
{{firstElement}}
`, {
firstElement: firstElement
});
secondElement.view();
// TypeError: html is undefined
// Ссылается на эту строку: let propsLength = Array.from(html.matchAll(pattern)).length;
Почему так получается? Я же делал проверку на Element, значит у объекта точно должно быть это свойство html