돌아가기

이상한 instanceof

중요도: 5

아래 예시에서 aB()를 통해 생성하지 않았습니다. 그런데도 instanceof는 왜 true를 반환할까요?

function A() {}
function B() {}

A.prototype = B.prototype = {};

let a = new A();

alert( a instanceof B ); // true

네, 실제로 이상해 보이긴 합니다.

그런데 instanceof는 평가 시, 함수는 고려하지 않고 평가 대상의 prototype을 고려합니다. 평가 대상의 prototype이 프로토타입 체인 상에 있는 프로토타입과 일치하는지 여부를 고려하죠.

문제에서 a.__proto__ == B.prototype이므로, instanceoftrue를 반환합니다.

instanceof의 내부 알고리즘에 의해 prototype은 생성자 함수가 아닌 타입을 정의합니다.