나는 항상 함수가 기본 코드인지 확인 해야하는 상황에 직면합니다. 기능 테스트에서 매우 중요한 내용입니다. 브라우저가 내장 또는 타사 클래스 라이브러리를 통해 시뮬레이션하는 기능입니다. 이것을 감지하기 위해, 가장 쉬운 방법은 물론 함수의 Tostring 방법에 의해 반환 된 값을 판단하는 것입니다.
자바 스크립트 코드
함수가 기본인지 확인하는 것은 실제로 매우 간단합니다.
// 기본 함수 기능이 iSnative (fn) {// 예제 : // alert.toString () // "function alert () {[aviTive code]}"// '' + fn은 js의 암시 적 유형 변환을 사용합니다. return (// {/s*/[기본 코드/]/s*/}/). test ( '' + fn); }함수를 문자열 표현으로 변환하고 정기적 인 일치를 수행하십시오. 이것이 구현 원리입니다.
업그레이드 된 버전, 업데이트!
(function () {// 매개 변수에 전달 된 값의 내부 (내부)를 처리하는 데 사용되는 객체의 tostring 메소드를 가져옵니다 .` [[class]]`var tostring = object.prototype.toString; // fntostring을 사용한 기능 대상의 경쟁 코드를 처리하는 데 사용되는 원시 기능의 toString 방법을 가져옵니다. (호스트 생성자), // (Safari> 4; 실제로 특정 배열 특정) var regostctor =/^/[Object. +? 생성자/] $/; String (tostring) // 정규 표현식과 관련된 모든 특수 문자를 탈출하십시오 (/[.*+?^$ {} () | [/] //] //] //] //] // 방법의 매개 변수. .replace (/tostring | (함수).*? (? = // () | for. +? (? = //])/g, '$ 1.*?') // endword + '$'); 함수 iSnative (value) {// 판사 유형의 유형 var type = typeof value; return type == 'function'//`function#tostring` 기본 메소드를 사용하여 호출하십시오. ? renative.test (fntostring.call (value)) // 유형이 'function'이 아닌 경우 // 호스트 객체 (호스트 객체)를 확인해야합니다. // 일부 (브라우저) 환경은 타이핑 된 배열을 dom 메소드로 취급하기 때문에 표준 기본 정규 패턴은 일치하지 않을 수 있습니다. 거짓; }; // window.isnative = isnative; } ());테스트 코드 :
ISNATIVE (ISNATIVE) // FALSE ISNATIVE (ALERT) // true Window.isnative (wind