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를 실제로 그보다 훨씬 강력하게 만드는 숨겨진 기능이 있습니다. 확장 된typeof및instanceof에 대한 대안으로 사용할 수 있습니다.
이상한 소리? 참으로. 신비화하자.,
사양에 따라 내장 된toString는 객체에서 추출되어 다른 값의 컨텍스트에서 실행될 수 있습니다. 그리고 그 결과는 그 가치에 달려 있습니다.
의을 보여줍니다.
여기서 우리는 우리 사용되는 통화에서 설명한 대로 이 장을 장식과 전달,전화/적용 기능을 실행합니다.objectToString컨텍스트에서this=arr.
내부적으로toString알고리즘은this를 검사하고 해당 결과를 반환합니다. 더 많은 예:
기호.,toStringTag
의 행동을 개체toString사용하여 사용자 정의 할 수 있습니다 특별한 객체 속성을Symbol.toStringTag.
예를 들어:
let user = { : "User"};alert( {}.toString.call(user) ); //
에 대한 대부분 환경-특정 개체가 제공합니다. 여기에 몇 가지 특정 브라우저 보기:
당신이 볼 수 있듯이,그 결과입니다 정확히Symbol.toStringTag(존재하는 경우),포장으로.,
끝에 우리는”typeof 에 스테로이드”하지만 작품에 대한 기본 데이터 유형을 위해,또한 내에서도 사용자 지정할 수 있습니다.
우리는{}.toString.call대신instanceof를 사용할 수 있습니다.,4012″>
typeof{}.toStringSymbol.toStringTag instanceofAs we can see, {}.toString is technically a “more advanced” typeof.,
instanceof운영자가 정말 빛나 때 우리는 우리와 함께 작업하는 클래스 계층 구조를 확인하려는 클래스 계정으로 상속입니다.피>
















답글 남기기