簡體   English   中英

indesign中的isPrototypeOf

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM