@Banan44
Full Stack

Undefined, в чем причина?

Пишу шаблонизатор:
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
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
Я же делал проверку на Element, значит у объекта точно должно быть это свойство html

if (value instanceof Element) {
    value = getHtml(key);
}

Ну value может быть и является "instanceof Element", но дальше вы вызываете функцию getHTML, передавая в качестве параметра строку. А никакого свойства html у нее, разумеется, нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы