То, что вообще не требует eval
, может быть
if (!window[key] || (typeof window[key].Method) != "function") return;
Это работает, потому что то, что логически верно, может быть безопасно проверено для участников (и возвращает undefined
, если член отсутствует).
Ошибка проверять x.Method
, когда x
равен null
или undefined
, но эти специальные значения логически ложны, поэтому приведенный выше код никогда не вызывает исключение.
Если имя метода также является динамическим, вы можете использовать эквивалентный подход к индексированию, но без необходимости eval
... например:
m = "Method"
if (!window[key] || (typeof window[key][m]) != "function") return;