이번에는 웹 개발에서 함수를 감지하는 방법과 웹 개발에서 함수를 감지할 때의 주의 사항에 대해 설명하겠습니다. 다음은 실제 사례입니다.
기술적으로 말하면 JS의 함수는 참조 유형입니다. Functionconstructors도 있으며 각 함수는 다음과 같이 해당 함수의 인스턴스입니다.
function myFunc () {}// 不好的写法console.log(myFunc instanceof Function); // true// 好的写法console.log(typeof myFunc === 'function'); // true
그러나 이 방법은 각 프레임에 고유한 속성이 있으므로 여러 프레임에서 사용할 수 없습니다. 함수 생성자. 다행히도 typeofoperator를 함수에 사용하여 "함수"를 반환할 수도 있습니다. 함수를 감지하는 가장 좋은 방법은 프레임 전체에 걸쳐 사용할 수 있으므로 typeof를 사용하는 것입니다.
typeof를 사용하여 함수를 감지하는 데는 제한이 있습니다. IE8 및 이전 버전의 IE browser에서는 typeof를 사용하여 DOM 노드(예: document.getElementById())를 감지하는 함수가 모두 "함수" 대신 "객체"를 반환합니다. 예:
// IE 8及其更早版本的IEconsole.log(typeof document.getElementById); // "object"console.log(typeof document.createElement); // "object"console.log(typeof document.getElementByTagName); // "object"
이 이상한 현상이 발생하는 이유는 브라우저마다 DOM 구현이 다르기 때문입니다. 간단히 말해서 이러한 초기 버전의 IE는 DOM을 내장된 JS 메서드로 구현하지 않았기 때문에 내장된 typeof 연산자가 이러한 함수를 객체로 인식하게 되었습니다. DOM은 명확하게 정의되어 있으므로 객체 멤버가 존재한다는 것은 메소드임을 의미합니다. 개발자는 종종 다음과 같이 DOM 메소드를 감지하기 위해 in 연산자를 사용합니다.
// 检测DOM方法if ("querySelectorAll" in document) { images = document.querySelectorAll("img"); }
이 코드는 querySelectorAll이 document에 정의되어 있는지 확인합니다. , 이 방법을 사용하세요. 가장 이상적인 방법은 아니지만 IE8 및 이전 브라우저에서 DOM 메서드의 존재를 감지하려는 경우 가장 안전한 방법입니다. 다른 모든 경우에는 typeof 연산자가 JS 기능을 감지하는 데 가장 적합합니다.
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 자료:
위 내용은 웹 개발에서 기능을 감지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!