2016-07-07 11 views

답변

2

이것은 대부분 노드 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 시스템에서 테스트에 사용되었습니다.

+0

문제를 확인해 주셔서 감사합니다. 여기 노드 문제를 열었습니다 : https://github.com/nodejs/node/issues/7592 – wprl

+0

@wprl 그들은 방금 구형의 초안을 구현했거나 es5와 es6 동작을 혼합했을 것 같습니다. 그냥 호기심 : 당신은 정말로이 행동에 의지합니까? –

+0

필자는'instanceof'를 자주 사용하지 않지만 가끔은 ... 나는'instanceof'를 사용하기위한 지원을 유지하기 위해 mixin 모듈 인 데코의 다음 버전을 원합니다. – wprl