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
{}.toString
Symbol.toStringTag
instanceof
As we can see, {}.toString
is technically a “more advanced” typeof
.,
instanceof
운영자가 정말 빛나 때 우리는 우리와 함께 작업하는 클래스 계층 구조를 확인하려는 클래스 계정으로 상속입니다.피>
답글 남기기