С помощью этого скрипта я добавить переменные объекта во время выполнения:JavaScript Динамические переменные
function MyDocument(someDocument)
{
if(!(someDocument instanceof KnownDocumentClass))
throw "Object must be an instance of KnownDocumentClass: " + someDocument;
this.Document = someDocument;
this.Fields = {};
this.updateValues = function()
{
for (var _it = this.Document.iterator(); _it.hasNext();)
{
var _property = _it.next();
try
{
this[_property.getQualifiedName()] = _property.getContent();
}
catch(err)
{
log("Error :"+err);
}
}
}
this.updateValues();
}
Так, например, я могу использовать
var mydoc = new MyDocument(knownjavadoc);
log(mydoc.Creator) // Shows the original content.
Это содержание может иметь несколько (некоторые - int
, некоторые String
и многие другие пользовательские классы Java). Так что это может случиться так, что log(mydoc.SomeProperty)
возвращается:
PropertyObjectImpl[id=abc123, data=Some Data, type=Node, order=42]
Я знаю, что я мог бы добавить функцию MyDocument
как
this.getValueAsString = function(name)
{
var _prop = this[name];
if(_prop instanceof PropertyObjectImpl)
return "PropertyObject with ID : " + _prop.getID();
else
return _prop;
}
Но для целей упражнений я хочу, чтобы добавить эту функцию toValueString()
непосредственно на эти свойства, чтобы позвонить по телефону:
var value = mydoc.SomeProperty.toValueString()
вместо
var value = mydoc.getValueAsString("SomeProperty");
Возможно ли это?
Я бы не советовал переопределять toString, поскольку он нехорошо применим к объектам, которые вы не владеете (подумайте о библиотеке PrototypeJs, которая отсутствовала по сравнению с чем-то вроде jQuery). Стандартные/нативные объекты должны вести себя так, как ожидалось. – pbo
Спасибо за ваш ответ, не плохая идея, но, как сказал pbo, я не хочу переопределять значение по умолчанию toString() всех этих объектов. – Kooki
@Kooki, см. Мое второе редактирование – series0ne