Comment puis-je ajouter une propriété d'objet à l'objet global en javascript rhinocéros

StackOverflow https://stackoverflow.com/questions/1162998

  •  18-09-2019
  •  | 
  •  

Question

J'ai quelques propriétés dans un objet que je voudrais ajouter à l'espace de noms global. En javascript sur le navigateur que je pouvais ajouter à l'objet window comme ceci:

var myObject = {
  foo : function() {
    alert("hi");
  }
  // and many more properties
};

for (property in myObject) {
  window[property] = myObject[property];
}

// now I can just call foo()
foo();

Mais comme le rhinocéros n'a pas l'objet global de la fenêtre, je ne peux pas le faire. Y at-il un objet équivalent ou d'une autre façon d'y arriver?

Était-ce utile?

La solution

Vous pouvez utiliser this, qui fait référence à l'objet global si la fonction actuelle est pas appelée comme méthode d'un objet.

Autres conseils

J'ai trouvé une solution plutôt brillante à NCZOnline :

function getGlobal(){
  return (function(){
    return this;
    }).call(null);
}
  

La clé de cette fonction est que le cet objet pointe toujours à l'objet global à tout moment que vous utilisez call() ou apply() et passez nulle comme premier argument. Puisqu'un champ nul n'est pas valide, l'interprète insère l'objet global. La fonction utilise une fonction interne pour assurer que la portée est toujours correcte.

Appel à l'aide:

var glob = getGlobal();

glob retourne alors [object global] dans Rhino.

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);

Vous pouvez simplement définir votre propre objet window comme une variable de haut niveau:

var window = {};

Vous pouvez alors que vous attribuer des valeurs à elle s'il vous plaît. ( "window" est probablement pas le meilleur nom de la variable dans cette situation, cependant.)

Voir aussi: Puis-je créer un objet « fenêtre » pour l'exécution de JavaScript dans le moteur java6 Rhino Script

Je n'ai pas utilisé rhinocéros mais pas pourriez-vous utiliser seulement var?

i.e..


var foo = myObject.foo;
foo();

Edit: Bon sang savais qu'il y aurait un hic! La suggestion de miles serait en déplacement dans ce cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top