javascript instanceof 상세 설명
우선 용법 을 소개 하 다
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 판 >
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.