यहाँ एक उदाहरण है कि समस्या का सामना करना पड़ रहा हूँ दर्शाता है:=== Nashorn में झूठी लौटाता है जब दोनों संदर्भों को एक ही वस्तु की ओर इशारा करते जाना चाहिए
ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine(
new String[] { "-strict" }
);
try {
engine.eval("function Foo(src) { this.src = src }; var e = { x: new Foo(\"what\") };");
ScriptContext c = new SimpleScriptContext();
c.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE);
c.getBindings(ScriptContext.ENGINE_SCOPE).putAll(engine.getBindings(ScriptContext.ENGINE_SCOPE));
System.out.println(engine.eval("var z = e.x; z === e.x;", c));
} catch(Exception e) {
throw new RuntimeException(e);
}
मुझे पता कर रहा हूँ कि वस्तुओं है कि एक और संदर्भ में instantiated गया , को "विदेशी" माना जाता है और ScriptObjectMirror
उदाहरण द्वारा लपेटा जा रहा है। मुझे लगता है कि यही कारण है कि मैं यहां एक समस्या में भाग रहा हूं। मेरा मानना है कि जब भी x
को संदर्भित किया जाता है, तो एक नया ScriptObjectMirror
उदाहरण बनाया गया है;
System.out.println(engine.eval("e.x === e.x;", c));
वहाँ इस के चारों ओर एक रास्ता है: कि केवल बात यह है कि कोड की निम्न बिट की व्याख्या कर सकते भी false
लौटने है? मैं कुछ ऐसा ढूंढ रहा हूं जो मैं जावा से कर सकता हूं ताकि इस बारे में जानने के लिए जावास्क्रिप्ट में कोड लिखने के बजाय संदर्भों/बाइंडिंग को एक निश्चित तरीके से स्थापित किया जा सके।
मैं इसे उत्तर के रूप में स्वीकार कर रहा हूं क्योंकि सुंदर ने इस व्यवहार के लिए मेलिंग सूची में एक अच्छी व्याख्या प्रदान की है। –