객체의 인스턴스를 확인하는 가장 좋은 방법은 instanceof 연산자를 사용 하거나 객체의 프로토 타입이 다른 객체의 프로토 타입 체인에 있는지 검사하는 isPrototypeOf () 메소드 를 사용하는 것입니다.
obj instanceof jQuery;
jQuery.prototype.isPrototypeOf(obj);
그러나 때로는 문서의 여러 jQuery 인스턴스의 경우 실패 할 수 있습니다. @Georgiy Ivankin이 언급했듯이 :
만약 내가 $
내 현재 이름 공간 가리키는 jQuery2
내가 외부 네임 스페이스 (어디에서 개체를 가지고 $
있다 jQuery1
) 그때 사용할 수있는 방법이 없다 instanceof
그 객체가있는 경우 확인하기 위해이 jQuery
객체가
이 문제를 극복하는 한 가지 방법은 클로저 또는 IIFE 에서 jQuery 객체의 별칭을 지정하는 것입니다.
//aliases jQuery as $
(function($, undefined) {
/*... your code */
console.log(obj instanceof $);
console.log($.prototype.isPrototypeOf(obj));
/*... your code */
}(jQuery1));
//imports jQuery1
그 문제를 극복하는 다른 방법 jquery
은obj
'jquery' in obj
당신은 원시 값이 검사를 수행 할 경우 보장함으로써 이전의 검사를 수정할 수 있도록하지만, 그것은 오류가 발생합니다 obj
을 수Object
'jquery' in Object(obj)
이전 방법이 가장 안전하지는 않지만 ( 'jquery'
객체 에서 속성을 만들 수 있음 ) 두 가지 방법으로 작업하여 유효성을 향상시킬 수 있습니다.
if (obj instanceof jQuery || 'jquery' in Object(obj)) { }
문제는 여기에 모든 개체가 속성을 정의 할 수 있다는 것입니다 jquery
더 나은 방법이 프로토 타입에 요청하는 것, 그래서 자신으로, 그리고 객체가 아닌지 확인 null
또는undefined
if (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery)) { }
인해 강제 의 if
문을 평가하여 단락을 만들 &&
때 조작자 obj
의 어느 하나 falsy 값 ( null
, undefined
, false
, 0
, ""
)하고 다른 검증을 수행하기 위해 진행한다.
마지막으로 유틸리티 함수를 작성할 수 있습니다.
function isjQuery(obj) {
return (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery));
}
살펴 보자 : 논리 연산자와 진실 / 거짓
selector
속성이 오래 전에 사용되지 않고 3.0에서 제거되었으므로 jQuery 객체 인 객체를 확인하는 올바른 방법은 아닙니다 . 이전 버전에서도 jQuery 객체에는 빈 선택기 문자열이있을 수 있습니다 (예 :$(window)
선택기 없음).instanceof
대신 사용하십시오 .