¿Cómo puedo añadir una propiedad de objeto al objeto global en JavaScript Rhino

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

  •  18-09-2019
  •  | 
  •  

Pregunta

Tengo algunas propiedades de un objeto que me gustaría añadir al espacio de nombres global. En javascript en el navegador tan sólo pudiera añadir al objeto window este modo:

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

Sin embargo, desde el rinoceronte no tiene el objeto de la ventana global no puedo hacer eso. ¿Hay un objeto equivalente o alguna otra manera de lograr esto?

¿Fue útil?

Solución

Se puede usar this, que hace referencia al objeto global si la función actual no se llama como un método de un objeto.

Otros consejos

he encontrado una solución bastante brillante en NCZOnline :

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

La clave de esta función es que el objeto this siempre apunta al objeto global en cualquier momento que está utilizando call() o apply() y pasa en null como el primer argumento. Desde un alcance nulo no es válido, el intérprete inserta el objeto global. La función utiliza una función interna para asegurar que el alcance es siempre correcto.

Llamada usando:

var glob = getGlobal();

glob volverá entonces [object global] en Rhino.

Así es como lo he hecho en el pasado:

// Rhino setup
Context jsContext = Context.enter();
Scriptable globalScope = jsContext.initStandardObjects();

// Define global variable
Object globalVarValue = "my value";
globalScope.put("globalVarName", globalScope, globalVarValue);

Se podía definir su propio objeto window como una variable de nivel superior:

var window = {};

A continuación, puede asignar valores a ella lo que quieras. ( "window" probablemente no es el mejor nombre de la variable en esta situación, sin embargo.)

Vea también: ¿Puedo crear un objeto 'ventana' de JavaScript se ejecuta en el java6 Rhino motor de guiones

No he utilizado rinoceronte, pero no podía que acaba de utilizar var?

es decir.


var foo = myObject.foo;
foo();

Editar: Maldita sabían que habría una captura! sugerencia de Miles sería la marcha en ese caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top