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 () {}"而不是一个可检查的对象?无论如何在记录函数时显示可检查的对象?

4

3 回答 3

7

当您调用console.log(foo)时,控制台会构建一个非标准化显示(它不是 EcmaScript 的一部分)。在大多数情况下(但不是针对基本对象),它会调用参数的toString函数(但会做更多的工作,例如为字符串添加引号、设置颜色、提供对象浏览等)。

函数的toString函数只是打印代码。

如果你想查看所有属性,你可以这样做

console.dir(foo);

或(至少在 Chrome 上

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

对于具有专用toString功能的其他对象,您会看到相同的现象。

例如 :

var a = new Number(3);
a.b = 4;
console.log(a); // logs just 3
console.dir(a); // lets you see b
于 2013-04-17T15:37:31.490 回答
1

用于console.dir()查看a

>>>>console.log(foo);
function()
>>>>console.dir(foo);
a            "an attribute"
prototype    Object { }
于 2013-04-17T15:38:51.090 回答
0

营养不良是对的。function 是一个 toString 打印代码的对象。

console.log(foo.a); 

会成功的

于 2013-04-17T15:39:38.437 回答