>  기사  >  웹 프론트엔드  >  객체가 Window_jquery인지 확인하는 구현 코드

객체가 Window_jquery인지 확인하는 구현 코드

WBOY
WBOY원래의
2016-05-16 17:57:171074검색

먼저 jQuery의 $.isWindow 함수를 살펴보겠습니다.

코드 복사 코드는 다음과 같습니다:

function isWin(obj){
return obj && typeof obj === 'object' && 'setInterval' in obj; 🎜>
함수 자체는 매우 과학적이며 주로 대상 객체에 setInterval 속성이 있는지 확인하여 판단합니다.
그러나 문제는 관례가 없으면 신뢰성이 없을 수 있다는 것입니다. , 예:




코드 복사 코드는 다음과 같습니다. var o ={xx:'oo'};
o[' setInterval']=true;
console.log( isWin(o) ); // true


위의 예는 다음과 같습니다. setInterval 속성을 개체 리터럴로 설정하면 사기가 성공합니다.
그러나 실제로 위에서는 null이 아닌 모든 개체를 배열과 같은 방식으로 위장할 수 있습니다.




코드 복사 코드는 다음과 같습니다. var arr=[1,2,3]
arr[' setInterval']=true;
console.log( isWin(arr) ); // true


위의 속성 속성 확인에 비해 toString 함수를 사용하는 것이 더 적합합니다. 판단할 대상:



코드 복사 코드는 다음과 같습니다. 함수 isWin(obj){
return Object.prototype.toString.call(obj)==='[object Window]'
}


위 함수는 표준 브라우저에서 잘 작동합니다. 하지만 새로운 호환성 문제도 발생합니다.



코드 복사 코드는 다음과 같습니다. // ie6-8의 결과
Object.prototype.toString.call(window)==='[ object Window]' // false
Object.prototype.toString.call(window)== ='[object Object]'; // true
// chrome
Object.prototype.toString.call (window)==='[object global]'; // true
// safari
Object.prototype.toString.call(window)==='[object DOMWindow]'; // true


물론, 주요 문제는 사악한 IE에서 비롯됩니다. 항상 IE의 초자연적인 사건을 생각나게 하는 경로:



코드 복사 코드는 다음과 같습니다. // 믿거나 말거나?
console.log( window= =document ) // true
console.log( document==window ) / / false


쓰다보니 최종 해결책이 나온 것 같습니다.



코드 복사 코드는 다음과 같습니다. function isWin(obj){
return/Window| global/.test({}.toString.call(obj))||obj== obj.document&&obj.document!=obj
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.