Ответ 1
Зависит от внутренней работы 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
свойство at время создания экземпляра, есть много способов возиться с такими тестами...
В качестве примечания:
jQuery сам проверяет obj && obj.jquery
. Он не использует instanceof
даже один раз. Вместо этого он использует комбинацию typeof
, duck-typing и toString.call()
для проверки типов, которая должна работать там, где instanceof
не работает.
Кроме того, hasOwnProperty()
никогда не используется. Я не уверен, что это говорит о качестве кода в библиотеке jQuery;)