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 () {}"
而不是一个可检查的对象?无论如何在记录函数时显示可检查的对象?
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 () {}"
而不是一个可检查的对象?无论如何在记录函数时显示可检查的对象?
当您调用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
用于console.dir()
查看a
>>>>console.log(foo);
function()
>>>>console.dir(foo);
a "an attribute"
prototype Object { }
营养不良是对的。function 是一个 toString 打印代码的对象。
console.log(foo.a);
会成功的