跳转到内容

ExtendScript 反射接口

ExtendScript 提供了一个反射接口,允许你了解一个对象的所有信息,包括其名称、描述、属性的预期数据类型、方法的参数和返回值,以及任何默认值或输入值的限制。


每个对象都有一个 reflect 属性,它返回一个 Reflection 对象,该对象报告对象的内容。例如,你可以使用以下代码显示对象的所有属性值:

var f = new File ("myfile");
var props = f.reflect.properties;
for (var i = 0; i < props.length; i++) {
$.writeln('this property ' + props[i].name + ' is ' + f[props[i].name]);
}

所有属性均为只读。

reflect.description

描述反射对象的简短文本,如果没有描述则为 undefined

字符串


reflect.help

描述反射对象的更完整的较长文本,如果没有描述则为 undefined

字符串


reflect.methods

包含反射对象所有方法的 ReflectionInfo 对象 数组,这些方法定义在类或特定实例中。

ReflectionInfo 对象 数组


reflect.name

反射对象的类名。

字符串


reflect.properties

包含反射对象所有属性的 ReflectionInfo 对象 数组,这些属性定义在类或特定实例中。对于具有动态属性(在运行时定义)的对象,列表仅包含脚本已访问的那些动态属性。

例如,在包装 HTML 标签的对象中,HTML 属性的名称在运行时确定。

ReflectionInfo 对象 数组


reflectionObj.find(name)

返回反射对象指定属性的 ReflectionInfo 对象,如果该属性不存在则返回 null

使用此方法可以获取尚未访问但已知存在的动态属性的信息。

参数类型描述
name字符串要检索信息的属性名称。

以下代码确定对象的类名:

obj = new String ("hi");
obj.reflect.name; // => String

以下代码获取所有方法的列表:

obj = new String ("hi");
obj.reflect.methods; //=> indexOf,slice,...
obj.reflect.find ("indexOf"); // => 方法信息

以下代码获取属性列表:

Math.reflect.properties; //=> PI,LOG10,...

以下代码获取属性的数据类型:

Math.reflect.find ("PI").type; // => number

此对象包含有关属性、方法或方法参数的信息。

你可以通过名称或索引在 Reflection 对象的 propertiesmethods 数组中访问 ReflectionInfo 对象:

obj = new String ("hi");
obj.reflect.methods[0];
obj.reflect.methods["indexOf"];

你可以通过索引在方法的 arguments 数组中访问方法参数的 ReflectionInfo 对象:

obj.reflect.methods["indexOf"].arguments[0];
obj.reflect.methods.indexOf.arguments[0];

obj.reflect.methods[0].arguments

对于反射方法,描述每个方法参数的 ReflectionInfo 对象 数组。

ReflectionInfo 对象 数组


obj.reflect.methods[0].dataType

反射元素的数据类型。

字符串。可能的值包括:

  • "boolean"
  • "number"
  • "string"
  • "Classname": 对象的类名。 !!! 注意 类名以大写字母开头。因此,值 String 表示 JavaScript 字符串,而 String 是 JavaScript 字符串包装对象。
  • *: 任何类型。这是默认值。
  • null
  • undefined: 不返回任何值的函数的返回数据类型。
  • unknown

obj.reflect.methods[0].defaultValue

反射属性或方法参数的默认值,如果没有默认值、属性未定义或元素是方法,则为 undefined

任意类型


obj.reflect.methods[0].description

描述反射对象的简短文本,如果没有描述则为 undefined

字符串


obj.reflect.methods[0].help

描述反射对象的更完整的较长文本,如果没有描述则为 undefined

字符串


obj.reflect.methods[0].isCollection

如果为 true,则反射属性或方法返回一个集合;否则为 false

布尔值


obj.reflect.methods[0].max

反射元素的最大数值,如果没有最大值或元素是方法,则为 undefined

数字


obj.reflect.methods[0].min

反射元素的最小数值,如果没有最小值或元素是方法,则为 undefined

数字


obj.reflect.methods[0].name

反射元素的名称。字符串或数组索引的数字。

字符串或数字


obj.reflect.methods[0].type

反射元素的类型。

字符串。可能的值包括:

  • readonly: 只读属性。
  • readwrite: 读写属性。
  • createonly: 仅在对象创建期间有效的属性。
  • method: 方法。