javascript instanceof 상세 설명

2166 단어
말 그대로 인 스 턴 스 of 는 특정한 인 스 턴 스 가 특정한 유형 이나 그 하위 클래스 에서 예화 되 었 는 지 확인 하 는 것 이다.
우선 용법 을 소개 하 다
MDN 사용 설명: 문법: object instanceof constructor 인자: object 를 인 스 턴 스 로, 즉 검사 할 대상 constructor 를 구조 적 방법 으로 되 돌려 줍 니 다: true / false
코드 를 보십시오.
var funcA = function() {};
var insA = new funcA();
console.log(insA instanceof funcA); //    true

OK, 사용법 이 간단 합 니 다. 다음 주 제 를 토론 하 겠 습 니 다.
instanceof 의 실현
이 부분 은 여러분 이 자바 script 원형 체인 과 계승 지식 을 잘 파악 해 야 합 니 다. 저 는 여기 서 간단하게 설명 할 뿐 입 니 다. 상세 한 상황 은 대신 문장 을 참고 하 시기 바 랍 니 다.
우 리 는 ES5 에서 통합 이 다음 과 같이 이 루어 진 다 는 것 을 안다.
//     
var superType = function() {};
//     
var subType = function() {};
//        
SubType.prototype = new SuperType();
//         ,                    ,      
SubType.prototype.constructor = SubType;
var sub = new subType();
//              __proto__   ,            
console.log(sub.__proto__ === SubType.prototype); //    true

인 스 턴 스 of 방법 을 수 동 으로 모 의 해 보 겠 습 니 다. (인 스 턴 스 of 는 키워드 입 니 다. 저 는 function 형식 으로 쓸 수 밖 에 없습니다)
//      ins     cons,    instanceof     
ins instanceof cons;

//   function    
function instanceof(ins, cons) {
    while(true) {
        if(ins.__proto__ === null) {
            return false;
        }
        if (ins.__proto__ === cons.prototype) {
            return true;
        }
        ins = ins.__proto__;
    }
}

위 코드 에서 설명 한 바 와 같이 Instanceof 는 실제 원형 체인 에 따라 위로 거 슬러 올 라 가 고 자 류 는 부 류 를 찾 지 못 하 며 인 스 턴 스 를 발견 할 때 까지 부 류 를 찾 지 못 합 니 다.proto__ 가리 키 는 것 은 바로 cons. prototype 입 니 다. 그렇지 않 으 면 ins 가 Object. prototype 으로 거 슬러 올 라 갔 을 때 Object. prototype 은 가 없 기 때 문 입 니 다.proto__그래서 인 스.proto__ === null 시, 우리 의 순환 이 끝까지 인 스. 에 성공 하지 못 했다 는 것 을 설명 합 니 다.proto__ === cons. prototype, 그러면 ins 는 cons 또는 cons 의 하위 클래스 가 예화 된 대상 이 아니 라 함수 가 false 로 돌아 갑 니 다.
따로 달걀 을 좀 동봉 하 니, 각 간수 들 은 원인 을 생각해 볼 수 있다.
console.log(Function instanceof Object);
console.log(Object instanceof Object);
console.log(Object instanceof Function);
console.log(Function instanceof Function);

참고: js 의 instanceof 연산 자 < 자 바스 크 립 트 고급 프로 그래 밍 제3 판 >

좋은 웹페이지 즐겨찾기