Skip to content

Instantly share code, notes, and snippets.

@alexandreaquiles
Last active August 29, 2015 14:00
Show Gist options
  • Save alexandreaquiles/11217265 to your computer and use it in GitHub Desktop.
Save alexandreaquiles/11217265 to your computer and use it in GitHub Desktop.
Passando objetos depois do construtor em JS no Rhino. Serve para implementar interfaces com uma sintaxe parecida com classes anônimas: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html#jsimplement
<html>
<body>
<div id="console">
-
</div>
</body>
<script type="text/javascript">
println = function(texto){
var console = document.querySelector("div#console");
console.textContent = texto;
};
</script>
<script type="text/javascript" src="pessoa.js"></script>
</html>
var Pessoa = function(nome, email, dados) {
this.nome = nome;
this.email = email;
this.dados = dados;
println(dados.cpf);
};
var maria = new Pessoa("maria", "m@gmail.com", { cpf: "222222222222" } );
// passando um objeto como último parâmetro
// funciona normalmente tanto no Rhino (o Js do Java) como em um Chrome da vida
var joao = new Pessoa("joao", "j@gmail.com") { cpf: "111111111111" };
// passando um bloco de código fora dos parênteses de invocação do construtor de Pessoa
// funciona só no Java
// no Chrome acontece o erro: "Uncaught SyntaxError: Unexpected token { "
import java.io.InputStreamReader;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Programa {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval(new InputStreamReader(Programa.class.getResourceAsStream("/pessoa.js")));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment