4
노드 4에서이 명령문을 실행하면 마지막 명령문은 true
이지만 노드 6에서는 false
이됩니다. 왜?노드 4에서는 instanceof가 노드 6에서 true로 평가됩니다.
F =() => {};
F.prototype = {};
Object.create(F.prototype) instanceof F;
노드 4에서이 명령문을 실행하면 마지막 명령문은 true
이지만 노드 6에서는 false
이됩니다. 왜?노드 4에서는 instanceof가 노드 6에서 true로 평가됩니다.
F =() => {};
F.prototype = {};
Object.create(F.prototype) instanceof F;
이것은 대부분 노드 6.x의 버그입니다. 다음 고려 : instanceof 연산자가 호출 Foo
의 @@hasInstance
방법을 반환 정의되어 있으므로
const Foo =() => {};
Foo.prototype = {};
const foo = Object.create(Foo.prototype);
// false in Node 6, true in Chrome
console.log(foo instanceof Foo);
// true in Node 6, true in Chrome
console.log(Foo[Symbol.hasInstance](foo));
처음 두 로그 본 (§12.9.4
) 경우, 같은 값을 반환한다. 무엇 false
이 예상되는 동안 Foo
가 호출 아니므로, 노드는 다음과 같은 경우에 형식 오류가 발생합니다, 더 재미있다 (§7.3.19
) :
노드 v6.2.2
const Foo = {
"prototype": {},
[Symbol.hasInstance]: Function.prototype[Symbol.hasInstance]
};
const foo = Object.create(Foo.prototype);
// throws in Node 6, false in Chrome
console.log(foo instanceof Foo);
// false in Node 6, false in Chrome
console.log(Foo[Symbol.hasInstance](foo));
PS (64 비트)가 Windows 시스템에서 테스트에 사용되었습니다.
문제를 확인해 주셔서 감사합니다. 여기 노드 문제를 열었습니다 : https://github.com/nodejs/node/issues/7592 – wprl
@wprl 그들은 방금 구형의 초안을 구현했거나 es5와 es6 동작을 혼합했을 것 같습니다. 그냥 호기심 : 당신은 정말로이 행동에 의지합니까? –
필자는'instanceof'를 자주 사용하지 않지만 가끔은 ... 나는'instanceof'를 사용하기위한 지원을 유지하기 위해 mixin 모듈 인 데코의 다음 버전을 원합니다. – wprl