It seems Object.getOwnPropertyNames() is broken in the current version of the JavaScript engine for some reason. I'll investigate it.
However you have a much better way to implement introspection on JavaScript objects. For example:
var o = ProcessInstance.fromIcon( "aNewImage" );
for ( var i in o )
console.writeln( i, ", ", typeof( o[i] ) );
For a PixelMath instance, the above code generates this output:
expression, string
expression0, string
expression1, string
expression2, string
expression3, string
useSingleExpression, boolean
symbols, string
variables, string
use64BitWorkingImage, boolean
rescale, boolean
rescaleLower, number
rescaleUpper, number
truncate, boolean
truncateLower, number
truncateUpper, number
createNewImage, boolean
newImageId, string
newImageWidth, number
newImageHeight, number
newImageAlpha, boolean
newImageColorSpace, number
newImageSampleFormat, number
SameAsTarget, number
RGB, number
Gray, number
i8, number
i16, number
i32, number
f32, number
f64, number
You should be able to apply the above routine to any process implemented in an installed module. Some core JavaScript objects, however, may have problems to access some properties requiring special preconditions. For example, we get the following for a File object:
isOpen, boolean
path, string
mode, number
canRead, boolean
canWrite, boolean
*** Error [000]: Error: File I/O Error: File::Position(): File must be open.
because the File.position property cannot be accessed if the file is not currently open. You can overcome this very easily as follows:
var o = new File; // for example
for ( var i in o )
{
try
{
console.writeln( i, ", ", typeof( o[i] ) );
}
catch ( x )
{
console.writeln( i, ", (inaccessible)" );
}
}
Let me know if this helps.