【发布时间】:2014-02-20 11:44:48
【问题描述】:
通过这个脚本,我在运行时向对象添加变量:
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,一些是Strings 和许多其他自定义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");
这可能吗?
【问题讨论】:
标签: javascript dynamic-function dynamic-properties