2013-08-21 2 views
0

JavaScript에서 비표준 속성 __ proto__ 및 함수 Object.getPrototypeOf (...)는 내부 속성 [[Prototype]]을 반환합니다. 모든 기능 재산 '프로토 타입'에 대한이유 Object.prototype .__ proto__ === null

예를 들어, Object.prototype에의 인스턴스입니다 :

Array.prototype instanceof Object//true 

하지만 너무 Object.prototype에와 :

Object.prototype.__proto__ === null //true 
Object.getPrototypeOf(Object.prototype) === null //true 

mozilla developer documentation는 말한다 :

An Object's proto property references the same object as its internal [[Prototype]] (often referred to as "the prototype"), which may be an object or, as in the default case of Object.prototype.proto, null .

Object.prototype이 더 적합할까요? proto 또는 실패한 Object.getPrototypeOf (Object.prototype) 반환 Object.prototype?

이것은 버그입니까? 이거 괜찮아? 왜?

+0

왜 그렇게 생각하니? – SLaks

+0

['[GetProperty]]'] (http://www.ecma-international.org/ecma-262/5.1/#sec-8.12.2)의 4 단계는 결코 사실이 아니므로 존재하지 않는 속성을 찾으십시오 'Object.prototype'에 무한 루프가 생깁니다. 단계는 프로토 타입 체인의 맨 위를 나타내는 null 프로토 타입을 테스트합니다. 'null' 프로토 타입없이 체인은 루프로 끝납니다. – apsillers

답변

3

프로토 타입 체인은 어딘가에서 멈춰야합니다.

Object.getPrototypeOf(Object.prototype) === Object.prototype이면 JS 엔진은 프로토 타입에서 문제를 해결하려고 할 때 무한 루프가 발생합니다. 거기를 찾을 수없는 경우

그것은 최대 Object.prototype 다시 무한히에 더 걸을 것, Object.prototype에 프로토 타입 체인을 걸어, 그리고 것입니다. 사실

, 당신이 자신을 수행하려고하면 오류 얻을 것이다 : 당신은 또한 Object.create(null)를 호출하여 어떤 [[Prototype]]과 자신의 개체를 만들 수 있습니다

> Object.prototype.__proto__ = Object.prototype 
Error: Cyclic __proto__ value 

참고.