JS 원생 여부 판정 방법

브 라 우 저의 추 세 는 Worker 와 같은 점점 더 많은 대상 을 추가 하 는 동시에 기 존의 대상 에 게 도 새로운 방법 을 추가 하 는 것 이다.그것 을 어떻게 호 환 하 는 지 첫 번 째 단 계 는 존재 하 는 지 를 검사 하 는 것 이 고,없 으 면 자신의 호 환 코드 를 보충 하 는 것 이다.이때 문제 가 생 겼 다.어떤 라 이브 러 리 는 너 에 게 이 단 계 를 해 주 었 지만,때로는 없 었 다.때로는 했 지만,표준 에 부합 되 지 않 았 다.따라서 단순히 type:of Array.prototype.map=="function"이 부족 할 수 있 습 니 다.이때 isNative 방법 이 등장 한다.제 가 사용 해 온 버 전 은 제 가 쓴 것 입 니 다.

var isNative = function(method){//  
      return !! method && (/{s*[native code]s*}/.test(method+"") || 
          /{s*/* source code not available */s*}/.test(method+""));// opera9.x  
  }
그러나 세계 가 이렇게 넓 으 니 이 문 제 를 연구 한 적 이 있 을 것 입 니 다.다음은 Diego Perini 의 버 전 입 니 다.safari 가 원생 방법 에 대한 toString 값 도 사실은 사람들 과 어 울 리 지 않 습 니 다.

var isNative = function(object, method) { 
    return object && method in object && 
      typeof object[method] != string && 
      // IE & W3C browser return "[native code]" 
      // Safari < = 2.0.4 will return "[function]" 
      (/{s*[native code]s*}|^[function]$/).test(object[method]); 
  }
제 버 전보 다 하나의 참 수 를 더 많이 가지 고 그 원생 대상 을 지정 할 수 있 는 방법 이지 만 하나의 매개 변 수 는 두 개의 매개 변수 와 관계 가 없습니다.결 과 는 우리 둘 이 완벽 하기 까지 는 아직 거리 가 있다 는 것 을 보 여 주 는 것 일 뿐이다.이 두 함수 가 합 쳐 져 도 정확 한 전집 은 아 닐 것 이다.물론 이것 은[native code]나 source code not available 가 문제 가 아 닙 니 다.자바 script 에서 다양한 방법 과 대상 을 쉽게 찾 을 수 있 기 때 문 입 니 다.예 를 들 어 아래 코드 는 검사 코드 를 성공 적 으로 속 일 수 있 습 니 다.

window.test = { 
  toString: function() { 
    return [function]; 
  } 
}; 
isNative(window, test); // true 마지막 으로 나 는 nwmathers 에서 이것 을 찾 았 다.

var isNative = (function() { 
   var s = (window.open + ).replace(/open/g, ); 
   return function(object, method) { 
     var m = object ? object[method] : false, r = new RegExp(method, g); 
     return !!(m && typeof m != string && s === (m + ).replace(r, )); 
   }; 
 })();

좋은 웹페이지 즐겨찾기