Зависит от внутренней работы jQuery, но я бы пошел с
obj instanceof jQuery
Это самый «способ JavaScript» для этого. Имейте в виду, что произойдет сбой при передаче объектов между границами окна / рамки!
предложение Томалака
'jquery' in obj
все еще должно работать в этом случае, поэтому вы должны использовать его, если вы собираетесь делать многооконный обмен данными. Я бы не рекомендовал его как общее решение, так как просто поиск свойства с именем 'jquery'
не очень надежен.
Оператор in
также выдаст ошибку, если obj
является примитивом. Если это поведение нежелательно, вы можете рассмотреть возможность использования одного из следующих тестов:
obj && obj.jquery
'jquery' in Object(obj)
Второй вариант мне кажется более привлекательным, но первый, скорее всего, будет быстрее.
Проверка
Object(obj).hasOwnProperty('jquery')
потерпит неудачу, поскольку объекты jQuery наследуют свойство только от своего прототипа.
Я бы также не рекомендовал использовать свойство constructor
для проверки типов в JavaScript - это может работать надежно для jQuery, но, поскольку constructor
- это просто свойство объекта, на которое указывает свойство prototype
функции конструктора в время реализации, есть много способов возиться с такими тестами ...
В качестве примечания:
jQuery сам проверяет наличие obj && obj.jquery
. Он не использует instanceof
даже один раз. Вместо этого он использует комбинацию typeof
, утки и toString.call()
для проверки типов, которая должна работать там, где instanceof
не удастся.
Кроме того, hasOwnProperty()
также никогда не используется. Я не уверен, что это говорит о качестве кода библиотеки jQuery;)