如何预先使用Javascript本地存储项目功能调用

问题描述:

我有一个对象的构造函数,其中包含变量和函数/方法(?)。我有多个对象,其中的每一个使用以下(对于每个ID和项目号变化)称为:如何预先使用Javascript本地存储项目功能调用

document.getElementById("item1").addEventListener("click", item1.apply); 

对象名和ID是相同的,这个值也被添加到本地存储器中的功能时运行。理论上,我想抓取该值,并在页面重新加载时使用它来生成/运行相同的功能(称为onclick)。

这听起来很简单,我认为连接可能会这样做。我可以[value] + [.apply();]来获得“item1.apply();”在控制台中,但我无法让浏览器识别/运行它作为一个功能。

在将其标记为重复创建动态函数等问题之前 - 我发现的大多数线程似乎比我需要的复杂得多。我试图和他们一起工作,但我没有办法。我没有包含更多的代码,因为我不想让复杂化似乎是一个相对简单的问题; onload获取值,添加到函数调用,运行。也许有一个简单的解决方案,我没有看到(新手是一个'全部)?

如果不是这样,我希望有人能指出我在正确的方向,因为我是正确的卡...提前

谢谢!

工作代码:

var itemsArray = ["item1", "item2", "item3"]; 
var currentItem = localStorage.getItem("current", this.value); 

if(localStorage.getItem("current") !== null) { // check if local storage item exists 

function isMatch(value, index, array) { // run current item thru isMatch 
return value == currentItem; // check if returned value matches currentItem 
} 

var result = itemsArray.filter(isMatch); // this will be the matching item in itemsArray 

window[result]["applyIt"](); // use the result to concatenate function call 
console.log("show me: " + result[0]); // create a string with it 
}; 
+0

在一个对象中对'itemN'进行分组,并使用一个键访问你需要的那个:'var items = {“item1”:item1,“item2”:item2,...};'然后使用'items'比如:'items [“item1”]。apply'。 –

+0

我已经把一个选项作为答案。提供一些基本代码[mcve],以便我们可以帮助您更多。 – Mouser

+0

非常感谢您回复我! 够搞笑的是,我已经有一个物品数组,我用来检查检索的物品是否有效(不知道它是否是绝对必要的,但它似乎是一个好主意)。我没有想过用它来填充函数调用,所以这是一个有用的提示。不幸的是我无法让它工作(如果你喜欢,可以共享非工作位)?所以搬到了Mouser的解决方案,它的工作。我将编辑我的原始问题以显示结果,如果您有任何进一步的意见,请随时分享。 再次感谢! – Meanderling

基于你的问题,你可以尝试这样做:

window[value][apply](); 

在你的情况:

window["item1"]["apply"]() 

item1是在一个函数全球范围和apply只是apply

+0

假设变量是全局的。如果他们不是? –

+0

你是正确的,否则,然后你需要对象的名称。最终你会回到窗口。 – Mouser

+1

非常感谢您的意见,在您与易卜拉欣之间,我能够得到它的工作!使用你的建议,我可以连接函数调用,就像我正在尝试做的那样(上面添加)。真棒!我不确定为什么窗口[“item”] ...有效,但项目[“item1”] ...并不像变量是全局的那样,按照您的假设。或者至少我认为他们是 - 他们不是在一个函数或任何东西。也许你或@ibrahim可以解释/链接一个线程? 再次感谢您的帮助! – Meanderling