instanceof연산자는 객체가 특정 클래스에 속하는지 여부를 확인할 수 있습니다. 또한 상속을 고려합니다.

이러한 검사는 많은 경우에 필요할 수 있습니다. 예를 들어,그 유형에 따라 인수를 다르게 처리하는 다형성 함수를 작성하는 데 사용될 수 있습니다.,

instanceof 연산자

이 구문은 다음과 같습니다.

obj instanceof Class

반환하는true경우obj그리고Class또는 클래스를 상속받습니다.,

예를 들어:

class Rabbit {}let rabbit = new Rabbit();// is it an object of Rabbit class?alert( rabbit instanceof Rabbit ); // true

이것은 또한 작동으로 생성자 기능:

// instead of classfunction Rabbit() {}alert( new Rabbit() instanceof Rabbit ); // true

…으로 내장 같은 클래스를Array:

let arr = ;alert( arr instanceof Array ); // truealert( arr instanceof Object ); // true

참고하는arr속한Object클래스입니다., 그 이유는Array가 프로토 타입 적으로Object에서 상속되기 때문입니다.

일반적으로instanceof는 검사에 대한 프로토 타입 체인을 검사합니다. 정적 메서드Symbol.hasInstance에서 사용자 지정 논리를 설정할 수도 있습니다.,

알고리즘의obj instanceof Class작품은 대충 다음과 같다:

여기에 그림에 무엇rabbit instanceof Animal과 비교Animal.prototype:

방법으로,또한 방법 objA.isPrototypeOf(objB),반환하는true경우objA은 어딘가에서의 체인 프로토타입을objB., 따라서obj instanceof Class의 테스트는Class.prototype.isPrototypeOf(obj)로 다시 구문 분석 할 수 있습니다.

재미 있지만Class생성자 자체가 검사에 참여하지 않습니다! 프로토 타입 체인과Class.prototype만 중요합니다.

객체가 생성 된 후prototype속성이 변경 될 때 흥미로운 결과를 초래할 수 있습니다.나는 그것을 할 수 없다.프로토 타입.,toString 유형에 대해

우리는 이미 알고 있는 일반 객체를 변환하는 문자열:

let obj = {};alert(obj); // alert(obj.toString()); // the same

의 구현의toString. 그러나toString를 실제로 그보다 훨씬 강력하게 만드는 숨겨진 기능이 있습니다. 확장 된typeofinstanceof에 대한 대안으로 사용할 수 있습니다.

이상한 소리? 참으로. 신비화하자.,

사양에 따라 내장 된toString는 객체에서 추출되어 다른 값의 컨텍스트에서 실행될 수 있습니다. 그리고 그 결과는 그 가치에 달려 있습니다.

의을 보여줍니다.

여기서 우리는 우리 사용되는 통화에서 설명한 대로 이 장을 장식과 전달,전화/적용 기능을 실행합니다.objectToString컨텍스트에서this=arr.

내부적으로toString알고리즘은this를 검사하고 해당 결과를 반환합니다. 더 많은 예:

기호.,toStringTag

의 행동을 개체toString사용하여 사용자 정의 할 수 있습니다 특별한 객체 속성을Symbol.toStringTag.

예를 들어:

let user = { : "User"};alert( {}.toString.call(user) ); // 

에 대한 대부분 환경-특정 개체가 제공합니다. 여기에 몇 가지 특정 브라우저 보기:

당신이 볼 수 있듯이,그 결과입니다 정확히Symbol.toStringTag(존재하는 경우),포장으로.,

끝에 우리는”typeof 에 스테로이드”하지만 작품에 대한 기본 데이터 유형을 위해,또한 내에서도 사용자 지정할 수 있습니다.

우리는{}.toString.call대신instanceof를 사용할 수 있습니다.,4012″>

works for returns typeof primitives string {}.toString primitives, built-in objects, objects with Symbol.toStringTag string instanceof objects true/false

As we can see, {}.toString is technically a “more advanced” typeof.,

instanceof운영자가 정말 빛나 때 우리는 우리와 함께 작업하는 클래스 계층 구조를 확인하려는 클래스 계정으로 상속입니다.