J'ai des propriétés dans un objet que j'aimerais ajouter à l'espace de noms global. En JavaScript sur le navigateur, je pouvais simplement l'ajouter à la fenêtre code> code> comme: mais depuis que Rhino n'a pas l'objet de la fenêtre globale que je ne peux pas fais ça. Y a-t-il un objet équivalent ou une autre façon d'accomplir cela? P> p>
5 Réponses :
Je n'ai pas utilisé Rhino mais que vous ne pouviez pas utiliser Var?
I.e. P>
var foo = myObject.foo; foo();
Hah! Trop simple pour moi :) Merci!
Ah, attends ... voici mon vrai problème. Je veux faire cela par programme. Je ne connais pas vraiment les noms des propriétés de l'objet avant la main.
Cette réponse est malheureusement juste un fouillis, comme tel pourrait-il être supprimé? Pas d'émotions fortes!
Vous pouvez utiliser ceci code>, qui fait référence à l'objet global si la fonction actuelle n'est pas appelée comme méthode d'objet. P>
fenêtre var = ceci; Au tout début du script m'a aidé. Voir le script ENV.JS par JOHN RESIG ejohn.org/blog/ apporter-le-navigateur-à-serveur
@Miles, Hmm, ne pensez-vous pas que la solution de Pnewhook est meilleure?
Vous pouvez simplement définir votre propre objet code> objet code> en tant que variable de niveau supérieur: Vous pouvez ensuite affecter des valeurs à votre guise. (" Voir aussi: puis-je créer une" fenêtre "objet pour JavaScript en cours d'exécution dans le script de rhinocéros Java6 Moteur p> p> fenêtre code>" n'est probablement pas le meilleur nom de variable dans cette situation, cependant.) p>
Voici comment je l'ai fait dans le passé:
// Rhino setup Context jsContext = Context.enter(); Scriptable globalScope = jsContext.initStandardObjects(); // Define global variable Object globalVarValue = "my value"; globalScope.put("globalVarName", globalScope, globalVarValue);
Pourquoi ne pas simplement utiliser ceci code>?
Brillant! N'oubliez pas que cela ne fonctionnera pas en mode Strict ES5, votre script peut donc échouer une fois que Rhino introduit l'ES5 -Conformance .
cool merci. fonction getglobal () {return (fonction () {retour this}) ()} code> est plus simple et équivalent (confirmé par l'auteur)
@ user123444555621, pourquoi cela ne fonctionnerait-il pas en mode Strict ES5?
Il retournera null code> à la place: développeur.mozilla.org/en-us/docs/web/javascript/reference/...
Jsfiddle montrant que cette ne fonctionne pas en mode Strict ES5 même si getglobal code> elle-même n'a pas "utiliser strict" (mais est dans une autre fonction marquée comme "utilisation stricte"
J'ai compris comment le faire sans avoir à écrire un supplément JavaScript: Stackoverflow.com/a/60783337/473201