2017-01-18 5 views
0

Мне нужно написать функцию, где я могу передать ей строку, и она заменит в ней слово «префикс» содержимым этой строки. Поэтому каждый раз, когда я вызываю функцию и передаю ей новую строку, то есть альфу, бета и т. Д., Она полностью перестраивает все слои и события внутри, используя этот ключ в качестве префикса. Я подозреваю, что мне нужно использовать eval, но я не совсем уверен, как в этом случае.Использование eval в функции для замены префикса на имена слоев?

layoutViews = (prefix) -> 
    prefix_layer1 = new Layer 
     width: 100 
     height: 100 

    prefix_layer1.on Events.Click -> 
     buttonActions() 

layoutViews(alpha) 
layoutViews(beta) 

Я использую coffeescript, но любые идеи в реальном JS очень приветствуются и оцениваются. Я понимаю, что этот конкретный вопрос намекает на то, что я делаю что-то еще не так в проекте, но в основном для моего собственного любопытства, возможно ли это.

Большое спасибо за любые мысли!

+3

Зачем вам нужно генерировать имена динамических переменных? Как вы собираетесь ссылаться на эти динамические переменные? Рассматривали ли вы использование объекта для хранения данных и использования ключей в качестве опорных точек? –

ответ

1

Так что вы хотите

function build(prefix) { 
    window[prefix + "_hi"] = function() { 
    alert("hi"); 
    }; 
} 

Использование так:

build("test"); 
test_hi(); 

Окно только глобальный элемент в браузерах, так что вы могли бы рассмотреть, чтобы назначить this вместо window зависит (плохо!) по вашему использованию.

+0

Отлично работает. Благодаря! –

+1

@FuegoDeBassi Нет, это не так. Не используйте это, вместо этого используйте объект. – Bergi

Смежные вопросы