2017-09-14 128 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)獲得這兩個默認的檢查和性能的可擴展列表。