El temps d'execució de JavaScript

Interpretació

A partir de Rhino 1.4 Release 2 , una manera d'interpretació és compatible . Quan està en la manera de compilar interpretativa , es crea una representació interna de la forma compilada i s'emmagatzema en lloc de generar una classe Java . Procedeix a l'execució de l'avaluació d'aquesta forma compilada utilitzant rutines de suport de Rhino.

Compilació de Java bytecodes

Per millorar el rendiment, Rhino pot compilar els scripts de JavaScript a codi de bytes de Java . Els bytecodes generats al seu torn depenen de les rutines de suport en temps d'execució . Cada seqüència de comandaments o la funció JavaScript es compila en una classe separada .

Recull de font estigui habilitat per a arxius de classes és compatible . És possible especificar els fitxers de classe, així com els paquets de generar en.

Tipus i valors

Hi ha sis tipus fonamentals de JavaScript . Aquests tipus s'implementen amb els següents tipus i valors de Java :

Tipus fonamental JavaScript tipus Java
Indefinit Un objecte Singleton definit per Context.getUndefinedType ( )
Nul nul
Boolean java.lang.Boolean
Nombre java.lang.Number , és a dir , qualsevol java.lang.Byte , java.lang.Short , java.lang.Integer , java.lang.Float o java.lang.Double . No java.lang.Long , des d'una doble representació d'una llarga pot perdre precisió .
Cadena java.lang.String
Objecte org.mozilla.javascript.Scriptable

A més , ECMA es refereix a objectes que implementen [ [ Call ] ] com a funcions. Aquests tipus d'objectes es representen mitjançant la implementació de la interfície de funcions .

Atès que JavaScript és un llenguatge de tipus dinàmics, del tipus Java estàtica d'un valor Javascript és java.lang.Object.

El comportament del motor de Javascript és indefinit si un valor de qualsevol tipus diferent de les descrites anteriorment s'introdueix en JavaScript. (Aquesta advertència no s'aplica a seqüències d'ordres que utilitzen LiveConnect, els valors de Java estan solts i envasats segons sigui apropiat per ajustar-se a les restriccions de tipus més amunt.)

Accés a la propietat

Propietats d'objectes de JavaScript pot accedir utilitzant cordes o identificadors numèrics. Conceptualment, tots d'accés esdevenen cadenes per tal de realitzar la recerca de la propietat en l'objecte. No obstant això, aquesta no és la implementació usada en la pràctica a causa de que un nombre de conversió de cadena és massa car per ser realitzat en cada accés a una matriu.

En canvi , tots els mètodes d'accés de propietat a Scriptable (ha , obtenir , establir , eliminar, getAttributes i SetAttributes ) ha sobrecarregat les formes que tenen una cadena o un argument int. És responsabilitat de la persona que truca per invocar la forma sobrecarregada adequada. Per exemple, l'avaluació de l'expressió obj ["3"] invocarà el mètode get (int , Scriptable) tot i que el nom de la propietat es presenta a la seqüència de comandaments com una cadena. De la mateixa manera, els valors dels nombres que no es fixen en els nombres enters (com 1.1 i 0x100000000) han de ser convertits en cadenes.

Definició d'objectes d'acollida

Objectes host són objectes JavaScript que proporcionen accés especial a l'entorn host. Per exemple, en un entorn de navegador, els objectes Window i document són objectes d'acollida.

La manera més fàcil per definir nous objectes d'acollida és mitjançant l'ús de
ScriptableObject.defineClass(). Aquest mètode defineix un conjunt d'objectes de JavaScript usant una classe Java. Alguns dels exemples que defineixen els objectes d'acollida d'aquesta manera.

Si els serveis prestats per defineClass són insuficients , intenta amb altres mètodes de
ScriptableObject i FunctionObject, com defineProperty i defineFunctionProperties.

Contextos i Temes

Cada subprocés que executa JavaScript ha de tenir un context associat. Múltiples fils (amb múltiples contextos associats) poden actuar sobre el mateix conjunt d'objectes. Tots els objectes d'acollida que es defineixen són responsables de qualsevol sincronització necessària per executar amb seguretat des de diversos subprocessos.

Document Tags and Contributors

 Contributors to this page: olgacuor
 Last updated by: olgacuor,