- Сообщения
- 2 242
- Реакции
- 1 227
Не знаю, как граждане, а я вот никак не мог найти себе надежный способ определить, что у меня за объект InDesign-а при итерации массива или коллекции объектов.
Вроде бы есть Object.constructor.name, но если, например, начать перебирать PageItems на странице, то вполне рядовая ситуация, когда constructor.name стабильно возвращает "PageItem".
Вроде бы есть более винторезное решение: Object.getElements()[0].constructor.name. В большинстве случаев оно позволяет получить реальное имя объекта. Но, как это обычно бывает с Adobe, всегда есть случаи, когда вернется-таки "PageItem" несмотря на то, что перед нами Rectangle.
А мне, как ордынцу и несостоявшемуся прапорщику, неоднозначность хуже горькой редьки.
Нарвавшись вчера в очередной раз на эти грабли, я-таки, как мне кажется, нашел решение, коим и хочу поделиться. Вдруг пригодится кому.
Вроде бы есть Object.constructor.name, но если, например, начать перебирать PageItems на странице, то вполне рядовая ситуация, когда constructor.name стабильно возвращает "PageItem".
Вроде бы есть более винторезное решение: Object.getElements()[0].constructor.name. В большинстве случаев оно позволяет получить реальное имя объекта. Но, как это обычно бывает с Adobe, всегда есть случаи, когда вернется-таки "PageItem" несмотря на то, что перед нами Rectangle.
А мне, как ордынцу и несостоявшемуся прапорщику, неоднозначность хуже горькой редьки.
Нарвавшись вчера в очередной раз на эти грабли, я-таки, как мне кажется, нашел решение, коим и хочу поделиться. Вдруг пригодится кому.
Код:
var getObjectClassName = function(item) {
var i = eval(item.toSource());
return i.constructor.name;
}