[英]isPrototypeOf in 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 (Graphic) ) {
alert("Graphic");
} else {
....
}
}
如果nver匹配。 是否有使用isPrototypeOf
? 我該怎么做才能測試對象是某種類型還是其子類?
編輯 :澄清一下,我正在嘗試測試是否有從Graphic 繼承的任何實例。
但據我現在所知,這似乎是不可能的。
您可能需要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的someClass
或其子級。 反射和isPrototypeOf
都不isPrototypeOf
幫助。
我可能會嘗試在try catch塊中進行投射,但認為這很丑陋。 因此,我將使用adobe論壇上建議的解決方案,測試所有可能的繼承人(從基層繼承的子代/類)和基類。 這是丑陋且冗長的,但我還沒有找到更好的解決方案。
編輯 :這是一個adobes示例的摘錄,它允許使用switch語法避免無窮的if構造:
switch (app.selection[myCounter].constructor.name){
case "Rectangle":
case "Oval":
case "Polygon":
case "GraphicLine":
case "TextFrame":
myObjectList.push(app.selection[myCounter]);
break;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.