2012-01-09 6 views
2

Google 크롬 (16.0.912.75 m,이 글을 쓰던 당시 최신 안정 버전)의 버그를 발견했을 수도 있습니다.log()로 표시되는 Chrome 콘솔은 무엇인가요?

var FakeFancy = function() {}; 
console.log(new FakeFancy()); 

var holder = { 
    assignTo : function (func) { 
     holder.constructor = func; 
    } 
}; 

holder.assignTo(function() { this.type = 'anonymous' }); 
var globalConstructor = function() { this.type = 'global' } 

console.log(new holder.constructor()); 

Firefox에서이 블록을 실행하면 "Object"로 나열되고 둘째는 "local"유형으로 표시됩니다. 하지만 크롬에서 실행하면

> FakeFancy 
> globalConstructor.type 

이 표시됩니다. 나무를 확장하면 내용이 정확합니다. 그러나 각 개체가 기록되는 첫 번째 줄로 Chrome이 표시 할 항목을 파악할 수 없습니다. 프로토 타입을 조작하지 않으므로 어디서든 상속되지 않는 평범한 오래된 개체 여야합니다.

처음에는 WebKit과 관련 있다고 생각했지만 Windows 용 최신 Safari (5.1.2 7534.52.7)에서 시도한 결과 "Object"로 표시되었습니다.

나는 생성자가 어디에서 호출되었는지에 대해 추측을하고 있다고 생각합니다. 익명의 생성자의 간접적 인 지시가 그것을 엉망으로 만들고 있습니까?

+1

질문이 처음 두 줄과 그 출력에 관한 것이면 왜 여분의 코드를 포함합니까? ("하지만 크롬이 첫 번째 라인으로 나열하는 것을 파악할 수 없습니다.") 나는 오해해야합니다 ... – Domenic

+0

죄송합니다. 선명도 편집을 추가했습니다. 로그 된 각 오브젝트의 첫 x 째 행. –

답변

1

첫 번째 줄은 웹킷 콘솔은 일반적으로 당신이 출력있어 개체의 유형을 알 수 있도록 "생성자 이름 추론"을 수행하려고

console.log(new FakeFancy()); 

의 결과이다. 내 생각 엔

function FakeFancy() {} 

처럼

var FakeFancy = function() {}; 

뿐 아니라 것과 같은 생성자 선언에 대한 추론을 할 수있다 (사파리 5.1 반대로) 당신이있어 왜 그렇게 그건 더 최신 버전이 크롬에 포함 된 것입니다 불균형을 본다.