오늘은 죽일 너무 많은 시간이 우연히 내가 노드 (v0.10.13) 명령 줄 조금을했다 : 어떤 instanceof
가하는 것은, MDN에 따라, 이제JavaScript primitives가 objectof 객체가 아닌 이유는 무엇입니까?
> 1 instanceof Object
false
> (1).__proto__
{}
> (1).__proto__ instanceof Object
true
> (1).__proto__.__proto__ === Object.prototype
true
:
instanceof 연산자는 객체의 프로토 타입이 인지 여부를 테스트하여 생성자의 프로토 타입 속성을 연결합니다.
분명히 Object.prototype
은 1
의 프로토 타입 체인입니다. 그렇다면 1 instanceof Object
은 왜 거짓입니까? 아마도 1
은 원시 객체가 아니기 때문에 시작하는 것일까?
좋아, 내가 받아 들일, 나는 더 많은 테스트를했다 :
> (1).__proto__ === (2).__proto__
true
> 'a'.__proto__ === 'b'.__proto__
true
> (1).__proto__ === 'a'.__proto__
false
> (1).__proto__.__proto__ === 'a'.__proto__.__proto__
true
> (1).__proto__.type = 'number'
'number'
> 'a'.__proto__.type = 'string'
'string'
> (2).type
'number'
> (1.5).type
'number'
> 'b'.type
'string'
그래서 분명히 모든 수의 기본 요소는 하나의 객체에서 상속, 모든 문자열 프리미티브는 다른 객체로부터 상속합니다. 이 두 객체는 모두
Object.prototype
에서 상속받습니다.
이제 숫자와 문자열을 프리미티브로 간주하면 왜 다른 개체에서 상속합니까? 반대로, 다른 객체를 상속받을 때 왜 객체를 고려해야합니까? 객체의 자식이 객체가 아니라는 것은 나에게 무의미한 것처럼 보인다.
한편, 나는 Firefox 22에서 이것들을 테스트했으며 같은 결과를 얻었다.
멋진 대답, 감사합니다. –
내 모든 +1이 당신에게 간다! – Greg
Myne 2 .... :-). –