Чтобы немного проработать и добавить более важную информацию (мне потребовалось немного времени, чтобы выяснить принятый ответ, и я явно не одинок, просматривая другие ответы, также, принятый ответ работает только для один тип объекта Рафаэля: он решает исходный вопрос, это более полный ресурс).
Обнаружение элементов Рафаэля
Используя x.constructor.prototype == Raphael.el
, вывзяв x
, переменную, которая может быть элементом Raphael (круг, путь и т. д. - не объект Raphael set
или paper
) иСравнение прототипа функции, которая его построила, с прототипом элементов Raphael в самом Raphael (Raphael - объект функции, el - определенное свойство).
Это работает, но также не найдетобъекты Рафаэля, основанные на различных прототипах Raphael.el, такие как наборы и бумажные объекты:
Обнаружение наборов Рафаэля
Если вы хотите проверить, является ли что-то набором Рафаэля, наборПрототип находится в Raphael.st
, поэтому вы можете проверить, является ли переменная набором Рафаэля, используя:
someSet.constructor.prototype == Raphael.st
Обнаружение бумажных объектов Рафаэля
Что касаетсяэквивалент для прослушивания объектов Raphael paper , поскольку они создаются с помощью функции Raphael()
, вы можете использовать:
paper.constructor.prototype == Raphael.prototype
Выше три в основномтак же, как ...
someSet.constructor.prototype == paper.circle().constructor.prototype
... или ...
someSet.constructor.prototype == paper.set().constructor.prototype
... или ...
someSet.constructor.prototype == Raphael().constructor.prototype
... но без фактического запуска этих функций , поэтому избегайте ненужной обработки (и избегайте Raphael (), жалующихся на то, что он не был переданID).
Обнаружение подтипов объекта (например, прямоугольник, круг ...)
Ничто из вышеперечисленного не работает для подтипов элементов Рафаэля - например, если вы сравниваете кругпри R.rect().constructor.prototype
возвращается true
.
Это связано с тем, что круги и прямоугольники сделаны с использованием прототипа element , определенного в Raphael.el
.Однако Рафаэль делает это легко:
someRectangle.type == "rect"
someCircle.type == "circle"
... и т. Д.