У меня есть два вопроса о Object.bindProperties метода() в Nashorn:Object.bindProperties() Метод Nashorn
- Есть исчерпывающая документация для этого метода, за исключением https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions#Nashornextensions-loadWithNewGlobal?
- Это ошибка, как показано ниже?
Следующий код не связывает свойства x, y и z объекта obj2 с obj, поскольку obj уже имеет свойства с одинаковыми именами. Это где-то задокументировано?
var obj = {x:10, y:20, z:30};
var obj2 = {x:100, y:200, z:300};
// bind properties of 'obj2' to 'obj'
Object.bindProperties(obj, obj2);
print(obj.x, obj.y, obj.z);
print(obj2.x, obj2.y, obj2.z);
---------------------------------
10 20 30
100 200 300
--------------------------------
Теперь давайте добавим новое свойство obj2. Новое свойство связано с OBJ, но OBJ считывает значение нового свойства как нуль:
var obj = {x:10, y:20, z:30};
var obj2 = {x:100, y:200, z:300};
// Add a new property to obj2
obj2.u = 600;
// bind properties of 'obj2' to 'obj'
Object.bindProperties(obj, obj2);
print(obj.x, obj.y, obj.z, obj.u); // obj.u is null. Why?
print(obj2.x, obj2.y, obj2.z, obj2.u);
---------------------------------
10 20 30 null
100 200 300 600
--------------------------------
А, вот еще один вариант кода, который работает. На этот раз я начал целевой объект как пустой. Теперь добавление нового свойства в источник прекрасно работает.
var obj = {};
var obj2 = {x:100, y:200, z:300};
// Add a new property to obj2
obj2.u = 600;
// bind properties of 'obj2' to 'obj'
Object.bindProperties(obj, obj2);
print(obj.x, obj.y, obj.z, obj.u); // obj.u is correct.It is 600
print(obj2.x, obj2.y, obj2.z, obj2.u);
----------------------------
100 200 300 600
100 200 300 600
----------------------------
Я использую JDK версии 1.8.0_20.
Благодаря Кишори