2013-04-17 2 views
2
var foo = function() {}; 
foo.a = "an attribute"; // set attribute to prove foo is an object 
console.log(foo) // log shows: function() {}; 

기능 foo가 객체라고 생각했지만 Chrome의 console.log가 검사 가능한 객체가 아닌 "function() {}" 인 이유는 무엇입니까? 함수를 로깅 할 때 inspectable Object를 표시 할 수 있습니까?은 기능 개체입니까? console.log가 inspectable Object를 표시하지 않는 이유는 무엇입니까?

답변

7

console.log(foo)을 호출하면 콘솔이 표준화되지 않은 디스플레이를 구성합니다 (EcmaScript의 일부가 아닙니다). 대부분의 경우 (기본 객체가 아닌) 인수의 함수는 toString입니다 (하지만 문자열에 따옴표 추가, 색상 설정, 객체 탐색 기능 제공 등).

toString 함수의 함수는 단순히 코드를 인쇄합니다.

모든 속성을보고 싶다면, 당신이 할 수있는

console.dir(foo); 

또는

console.log("%O", foo); 

당신은 다른 개체 전용 toString 기능을 갖는와 같은 현상을 볼 것 (at least on Chrome)

. 예를 들어

:

var a = new Number(3); 
a.b = 4; 
console.log(a); // logs just 3 
console.dir(a); // lets you see b 
+0

나는 그것이 toString''호출 생각하지 않는다 할 것입니다. 콘솔은 그것이보기에 적합한 방식으로 값을 형식화합니다. 결국'console.log ({})'는 (적어도 Chrome에서는) [[object Object]]를 표시하지 않습니다. –

+0

@FelixKling 사실 그것은 다릅니다 ... 나는 그것을보고 있습니다. 나는 또한'Object.prototype.toString.apply (foo)' –

+0

와우, console.log ("% O", foo)에 감사하고, % O가 있다는 것을 결코 알지 못한다. –

1

사용 console.dir()a

>>>>console.log(foo); 
function() 
>>>>console.dir(foo); 
a   "an attribute" 
prototype Object { } 
0

dystroy이 옳다 볼 수 있습니다. function은 toString이 코드를 인쇄하는 객체입니다.

console.log(foo.a); 

트릭

관련 문제