2017-09-14 77 views
2

嘿,我对JS很陌生,发现函数也是对象。 这意味着我可以这样给他们添加属性:在Javascript中用作对象的函数

let func = function(){}; 
func.foo = "foo"; 
console.log(func.foo); // prints foo 

然而,当我们现在这样做:

console.log(func); 

它将返回(使用Chrome):

enter image description here

它为什么不显示对象的属性,就像它通常在其他类型的对象上显示的那样? 此外,当我们例如设法CONSOLE.LOG(功能),它会返回以下输出:

enter image description here

这是什么原生代码?我从other sources得到的是,它是用另一种编程语言(C,C++)编写的代码,它编程了此构造函数的功能。

在此先感谢!

+3

因为这就是谷歌浏览器的控制台如何记录“功能”类型的元素。 –

+1

...如果你想让它看起来像一个对象(所以你可以看到它的属性),然后使用'dir'而不是'log':'console.dir(func);' –

+0

@ibrahimmahrir你也可以' console.log(Object.assign({},func));' –

回答

4

Chrome的控制台显示功能的主体而不是它们的属性,因为这通常更有用。这是很容易地告诉当你不使用一个空函数:

Screenshot of non-empty function in Chrome console

,它会在[native code]确实替换的时候没有JavaScript的身体中显示。

由于@易卜拉欣mahrir指出,你可以使用console.dir(func)获得这两个默认的检查和性能的可扩展列表。