Есть ли возможность отказаться от eval в моем случае и как?

Пишу свой плеер для youtube, вызов плеера:
<div class="youtube_player" data--video="id:'player1',videoId:'_k9TlsI102g'"></div>


т.е. id плеера беру из атрибутов тега, создаю объект вида:
playerInfo.id='player1'
playerInfo.videoId='_k9TlsI102g'

далее создаю объект с именем id
eval(`var ${playerInfo.id} = {};`);
eval(`${playerInfo.id}.iframe = document.getElementById(playerInfo.id);`);
eval(`${playerInfo.id}.vid = document.getElementById(playerInfo.id).parentNode;`);


и далее еще порядка 300 строк кода, который мне нужно обернуть в eval

Посмотрел на js других плееров, они совсем не используют функцию eval, как они из строки получают переменную и как к ней потом обращаются?
А то чувствую, что я просто утону в обертках eval.
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
Tolly
@Tolly Автор вопроса
Вот нашел вариант:
var a = 'test';
    window[a] = 'Привет';
    alert(window.test); // Привет
    window.test = {}
    window.test.value = 'Секрет';
    alert(window.test.value); // Секрет


где вместо window может и другой элемент, в пределах которого, нужна переменная.

Решение пока не отмечаю решением, может кто-то еще что-то дельное подскажет.

В моем случае window[playerInfo.id].playVideo(); прекрасно работает.

Еще вариант можно простоthis[playerInfo.id].playVideo();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
Ваш ответ на вопрос

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

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