2017-10-21 46 views
2

J'ai un constructeur d'objet qui contient des variables et une fonction/méthode (?). J'ai plusieurs objets, dont chacun est appelé à l'aide les éléments suivants (numéro d'identification et le point changement pour chacun):Comment ajouter un élément de stockage local à un appel de fonction en utilisant Javascript

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

Le nom de l'objet et l'ID sont les mêmes, cette valeur est également ajoutée au stockage local lorsque la fonction est exécuté. En théorie, je veux saisir cette valeur et l'utiliser pour générer/exécuter la même fonction (comme on l'appelle onclick) lorsque la page se recharge.

Cela semble assez simple et je pensais que la concaténation pourrait le faire. Je peux faire [valeur] + [.apply();] pour obtenir "item1.apply();" dans la console, mais je n'arrive pas à le reconnaître/exécuter en tant que fonction. Avant cela est marqué comme une question en double sur la création de fonctions dynamiques, etc - la plupart des threads que j'ai trouvés semblent beaucoup plus compliqué que j'ai besoin. J'ai essayé de travailler avec eux, mais je n'arrive nulle part. Je n'ai pas inclus plus de code, parce que je ne voulais pas compliquer ce qui me semble être un problème relativement simple; Onload obtenir une valeur, ajouter à l'appel de fonction, exécuter. Peut-être y a-t-il une solution simple que je ne vois pas (être débutant et tout)?

Sinon, je suis en espérant que quelqu'un peut me diriger dans la bonne direction, comme je suis bon coincé ...

Merci à l'avance!

Code de travail:

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

Regroupez le 'itemN' dans un objet et accédez à celui dont vous avez besoin avec une clé:' var items = {"item1": item1, "item2": item2, ...}; 'et ensuite utilisez' items' comme: 'items [" item1 "]. apply'. –

+0

J'ai mis une option comme réponse. Fournissez du code de base [mcve] afin que nous puissions vous aider davantage. – Mouser

+0

Merci beaucoup de revenir à moi !! Assez drôle, j'avais déjà un tableau d'éléments que j'utilisais pour vérifier si l'objet récupéré était valide (je ne sais pas si c'est strictement nécessaire, mais cela semblait être une bonne idée). Je n'avais pas pensé à l'utiliser pour remplir l'appel de fonction, c'était donc un rappel utile. Malheureusement, je ne pouvais pas le faire fonctionner (peut partager des morceaux qui ne fonctionnent pas si vous le souhaitez?). Donc, déplacé sur la solution de Mouser, qui a fonctionné. Je vais modifier ma question initiale pour montrer le résultat et si vous avez d'autres commentaires, n'hésitez pas à partager. Merci encore! – Meanderling

Répondre

2

Sur la base de votre question, vous pouvez essayer de le faire:

window[value][apply](); 

En vous cas:

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

item1 est une fonction dans la portée mondiale et apply est simplement apply.

+0

En supposant que les variables sont globales. Et s'ils ne le sont pas? –

+0

Vous avez raison de supposer le contraire, mais alors vous avez besoin du nom de l'objet. Finalement, vous reviendrez à la fenêtre. – Mouser

+1

Merci beaucoup pour votre contribution, entre vous et Ibrahim, j'ai pu le faire fonctionner! En utilisant votre suggestion, j'ai été capable de concaténer l'appel de fonction, exactement comme j'essayais de le faire (ajouté ci-dessus). Impressionnant! Je ne sais pas pourquoi window ["item"] ... a fonctionné mais les items ["item1"] ... n'ont pas fonctionné comme les variables sont globales, selon votre hypothèse. Ou au moins je pense qu'ils sont - ils ne sont pas détenus dans une fonction ou quoi que ce soit. Peut-être que vous ou @ibrahim pouvez expliquer/lier un fil? Merci encore, si utile! – Meanderling