Здесь есть несколько проблем с синтаксисом.
Во-первых, function ${function1Name}()
недопустимый синтаксис.Имена функций должны быть определены до выполнения.Если вы хотите получить динамический доступ к функции, поместите ее в объект и задайте ключ с помощью ссылки на переменную.
Во-вторых, ${function1Name}()
снова недопустимый синтаксис.Вы не можете вызывать такую функцию динамически.Ссылаясь на приведенное выше предложение, вы можете получить динамический доступ к объекту, поэтому первая точка решает эту проблему.
В-третьих, интерполяция строк работает только в пределах литералов шаблона , поэтому вам необходимо разделить строку с помощьюгалочки: ``
. Однако здесь полностью избыточно, так как вы можете просто использовать $(function1Class)
С учетом этих проблем приведем обновленный пример:
var function1Name = "test_function";
var function1Url = "https://www.google.com";
var function1Class = ".test_function_class";
var funcObj = {
[function1Name]: function() {
console.log(`function called, window would open here containing ${function1Url}...`);
// window.open(function1Url, "_blank", "height=200");
}
}
$(function1Class).click(function() {
funcObj[function1Name]()
});
/*
alternative using a template literal, although note that it's redundant here
$(`${function1Class}`).click(function() {
funcObj[function1Name]()
});
*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#" class="test_function_class">Click me</a>
Последнее, на что следует обратить внимание, это то, что ни одна версия IE не поддерживает литералы шаблонов, поэтому перед использованием убедитесь, что у вас есть требования к поддержке браузера.