是原型在设计中
isPrototypeOf in indesign
本文关键字:原型 更新时间:2023-09-26
嗨,我是设计脚本的新手,想弄清楚对象是否是类的子类型。 示例:我想遍历所有页面项目并获取所有不是图形的内容:
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 {
....
}
}
如果永远不会匹配。有没有如何使用isPrototypeOf
的例子?我必须做什么来测试对象是某种类型还是它的子类?
编辑:澄清一下,我正在尝试测试我是否有从图形继承的任何内容的实例。
但就我现在所见,这似乎是不可能的。
你可能想要 instanceof 运算符。
if (layer.allPageItems[i] instanceof Graphic) {
alert("Graphic");
} else {
....
}
您也可以使用 isPrototypeOf
但您必须颠倒顺序并获取原型本身,而不是构造函数。所以它看起来像这样:
if (Graphic.prototype.isPrototypeOf(layer.allPageItems[i])) {
alert("Graphic");
} else {
....
}
您可以通过调用 getElements() 方法来访问 pageItem 的本质。它返回原始材料的数组。给定页面上的矩形(没有别的):
app.activeDocument.allPageItems[0].getElements()[0] instanceof Rectangle //true;
你确定它不应该是
Graphic.isPrototypeOf(layer.allPageItems[i])
或类似的东西
Graphic.prototype.isPrototypeOf(layer.allPageItems[i])
?
您当前的版本听起来像是倒退。
显然这是不可能的,我也在 adobe 论坛上询问了这个结果:http://forums.adobe.com/message/4461211#4461211
所以简短的回答是,我没有办法检查我拿着一个物体,是someClass
的instace还是它的孩子的。反思和isPrototypeOf
都无济于事。
我可能会尝试在尝试捕获块中投掷,但认为这很丑陋。因此,我将使用adobe论坛上建议的解决方案,测试所有可能的继承人(来自基础的子类/类)和基类。这是丑陋而冗长的,但我还没有找到更好的解决方案。
编辑:这是来自Adobes示例之一的EXCEPRT,它允许开关语法避免无休止的if构造:
switch (app.selection[myCounter].constructor.name){
case "Rectangle":
case "Oval":
case "Polygon":
case "GraphicLine":
case "TextFrame":
myObjectList.push(app.selection[myCounter]);
break;
}
相关文章:
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- Node.js中的JavaScript原型对象效率
- 重载JS'firefox中的对象原型
- “util.inherits”和在NodeJS中扩展原型之间的区别
- 附加到原型属性的Do函数没有闭包
- 使用方括号访问插件原型函数
- 为什么JSON.stringify没有序列化原型值
- 为什么要返回'这'在导致循环的JavaScript原型中
- 带有对象/原型的链式承诺(Q延期)
- 如何覆盖原型中的事件侦听器
- 如何在Mocha/Chai中测试JS原型(非模块)
- 我将如何将Base的原型分配给User
- 原型和用法 Javascript
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- JavaScript对象不是从原型链继承的
- 得到"未定义不是函数“;使用显示原型图案时出错
- 需要原型内部或外部的功能