Javascript indesign中的isPrototypeOf
您好,我是indesign脚本编写的新手,希望了解对象是否是类的子类型。示例:我希望迭代所有页面项目,并获取所有非图形的内容:Javascript indesign中的isPrototypeOf,javascript,adobe-indesign,Javascript,Adobe Indesign,您好,我是indesign脚本编写的新手,希望了解对象是否是类的子类型。示例:我希望迭代所有页面项目,并获取所有非图形的内容: layer = app.activeDocument.layers[layerIndex]; for (i = 0; i < layer.allPageItems.length; i++) { alert(layer.allPageItems[i].reflect.name) if(layer.allPageItems[i].isPrototypeOf
layer = app.activeDocument.layers[layerIndex];
for (i = 0; i < layer.allPageItems.length; i++) {
alert(layer.allPageItems[i].reflect.name)
if(layer.allPageItems[i].isPrototypeOf (Graphic) ) {
alert("Graphic");
} else {
....
}
}
layer=app.activeDocument.layers[layerIndex];
对于(i=0;i
无论if nver如何匹配。有没有关于如何使用isPrototypeOf
的示例?我必须做什么来测试一个对象是否属于某个类型或其子类
编辑:为了澄清,我正在尝试测试是否有从Graphic继承的任何内容的实例
但就我现在所见,这似乎是不可能的。你确定这不是应该的吗
Graphic.isPrototypeOf(layer.allPageItems[i])
或者类似的
Graphic.prototype.isPrototypeOf(layer.allPageItems[i])
?
您当前的版本听起来像是在倒退。您可能需要操作员
if (layer.allPageItems[i] instanceof Graphic) {
alert("Graphic");
} else {
....
}
您也可以使用isPrototypeOf
,但必须颠倒顺序,获取原型本身,而不是构造函数。所以看起来是这样的:
if (Graphic.prototype.isPrototypeOf(layer.allPageItems[i])) {
alert("Graphic");
} else {
....
}
您可以通过调用getElements()方法来访问pageItem的本质。它返回原始材质的数组。 在页面上给定一个矩形(无其他内容):
显然这是不可能的,我在adobe论坛上也问了这个问题,结果是: 所以简单的回答是,我无法检查我是否持有一个对象,它是
someClass
的instace或其子对象。反射和isPrototypeOf
help都不是
我可能尝试在一个尝试catch块中铸造,但认为这是丑陋的。因此,我将使用adobe论坛上建议的解决方案,测试所有可能的继承人(从基类继承的子类/类)和基类。这既丑陋又冗长,但我还没有找到更好的解决办法
编辑:这是adobes示例中的一个例外,它允许切换语法避免无休止的if构造:
switch (app.selection[myCounter].constructor.name){
case "Rectangle":
case "Oval":
case "Polygon":
case "GraphicLine":
case "TextFrame":
myObjectList.push(app.selection[myCounter]);
break;
}
我不知道如何使用它,这就是为什么我问如果你不知道如何使用它,你怎么知道它的存在?你知道adobe delviers的一个文档,不幸的是它缺少示例(我知道有一些是indesign,…)更高版本是正确的,但是,如果测试的项目是图形的子类型,它不会告诉我是真的。这两种方法都不适用于图形类型,例如图像。我必须直接测试图像。
switch (app.selection[myCounter].constructor.name){
case "Rectangle":
case "Oval":
case "Polygon":
case "GraphicLine":
case "TextFrame":
myObjectList.push(app.selection[myCounter]);
break;
}