Как правильно / правильно проверить, является ли объект объектом jQuery в javascript? - PullRequest
11 голосов
/ 28 января 2009

Я пишу функцию javascript и в «компактном» стиле разработки javascript тип / длина аргументов изменяет поведение функции. Одним из возможных типов аргумента является объект jQuery, для которого мне нужна особая логика.

Как лучше всего проверить, является ли объект экземпляром jQuery?

Ответы [ 3 ]

20 голосов
/ 28 января 2009

Зависит от внутренней работы 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;)

6 голосов
/ 28 января 2009

Одно из следующего:

obj instanceof jQuery
obj && obj.constructor == jQuery
obj && obj.jquery 

рекомендуется instanceof

0 голосов
/ 21 февраля 2011

Используйте это вместо instanceof для проверки объектов jQuery.

/**
 * @see http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak
 * @return Boolean True if object is of type jQuery, false otherwise
 */
function isjQuery(obj) {
    return obj && obj.hasOwnProperty && obj instanceof jQuery;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...