2009-09-24 6 views
1

Comment puis-je exécuter une fonction JavaScript/morceau de code dans un contexte spécifique qu'il verrait comme un contexte global? Ce n'est pas la même chose que de changer ceci (appel/application), c'est plus comme changer la 'fenêtre'.JavaScript: exécuter du code dans un contexte spécifique

En fait, si je le code suivant:

(function() { x.value = 5; return value; })() 

est-il un moyen de le faire fonctionner (retour 5) sans modifier le code lui-même?

De même, l'exécution de code dans le contexte de x (si possible) est ma première idée, mais peut-être y a-t-il une autre solution?

MISE À JOUR:

problème original: Je suis en train de tester un bookmarklet en utilisant le sélénium. Bookmarklet suppose qu'il peut faire

window.SomeObject = {...}; SomeObject.doSomething(); 

je reçois le bookmarklet de la page et l'exécuter à l'aide de selenium.get_eval $, et dans le contexte de l'objet global get_eval est un objet lui-même du sélénium, pas la fenêtre. window.SomeObject fonctionne toujours parce que le contexte de sélénium a la fenêtre, mais juste SomeObject ne fonctionne pas.

Je pense que je connais une autre solution possible, mais j'aimerais savoir s'il y a une réponse à la question originale.

MISE À JOUR 2 (solution):

solution finale (fonction de la réponse par geowa4):

x = {}; with(x) { return (function() { x.value = 5; return value; })(); } 
+4

pourriez-vous s'il vous plaît expliquer ce que vous essayez de faire exactement? – dusoft

+0

Tout d'abord, vous définissez 'x.value' mais vous ne retournez que' value', donc votre code * * ne renverra pas 5 ". Deuxièmement, quoi? –

+0

ajouté une explication à la fin de la poste –

Répondre

2

Vous pouvez modifier votre portée en utilisant le mot-clé with.

(function() { x.value = 5; with(x) { return value; })(); 

Le mot-clé with-vues le bloc de code à l'objet donné. Donc, dans ce cas, vous allez retourner 5.

+0

> Sans changer le code lui-même? –

+1

@crescentfresh: oui, mais c'est impossible, donc je suis allé avec l'option la plus proche. un coup de couteau dans l'obscurité. – geowa4

+0

J'ai ajouté plus de détails à la question. C'est une très bonne idée, mais cela fonctionnera-t-il dans un cadre externe? Je vais vérifier. –

Questions connexes