2015-11-25 3 views
1

Я хочу динамически создавать некоторые функции с помощью javascript. все функции выполняют специальную работу, но с разными данными (например, console.log("data")).Как создать динамическую функцию в javascript?

config = ['data1', 'data2', 'data3']; 
returned = {}; 
for(var i in config){ 
    returned[config[i]] = function(){console.log(config[i])}; 
} 

I над кодом, Все функции должны регистрировать данные, но разные данные. Я хочу, когда я позвоню returned["data1"](), это журнал data1, но когда я звоню returned["data1"](), он регистрирует data3.

Возможно ли это? Как я могу сделать?

+0

Все данные являются строками. –

+0

Это потому, что объекты являются ссылочной типизированной переменной, и она будет ссылаться на последнее значение. Вам нужно будет привязать каждую функцию с определенным значением – Rajesh

ответ

2
config = ['data1', 'data2', 'data3']; 
returned = {}; 
config.forEach(function(data){ 
    returned[data] = function(){ 
     console.log(data); 
    }; 
}); 

Редактировать

Вы также могли бы извлечь эту внутреннюю функцию, так что это немного меньше памяти:

config = ['data1', 'data2', 'data3']; 
returned = {}; 

function doSpecialWork(data){ 
    console.log(data); 
}; 

config.forEach(function(data){ 
    returned[data] = doSpecialWork(data); 
}); 

Edit 2

Вы можете также получить глупый, но назовите себя функциональным:

config = ['data1', 'data2', 'data3']; 

function doSpecialWork(data){ 
    console.log(data); 
}; 

returned = config.reduce(function(returned, data){ 
    returned[data] = doSpecialWork(data); 

    return returned; 
}, {}); 
2

Это, вероятно, то, что вы ищете.

var returned = {}; 
['data1', 'data2', 'data3'].forEach(function(element) { 
    returned[element] = function() { console.log(element); }; 
}); 
+0

Разница 27 секунд ... –

+0

Ха-ха, извините, чувак! Однако большие умы. –

+0

Спасибо вам обоим. –

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