2016-04-06 41 views
0

我是Javascript的新用戶。我有時會回到課程,我試圖記住一個關於所有功能都是包含屬性的對象的概念,將包含寫入該函數中的代碼以及包含該函數名稱的另一個屬性。Javascript function包含其代碼的財產

我試過了,我發現如下名稱屬性。但無法找到代碼屬性。這真的存在嗎,或者我可能是錯的。

console.log(
 
    (function f() { 
 
    a = 1 
 
    }.name) 
 
)

所以物業應該返回

A = 1

不嘗試做任何事情。我正在刷我的JS,因爲我想學習角度。

+0

下面是關於函數發現密鑰列表對象原型。可能你需要:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype – user2263572

+0

你想嘗試類似'({a:1})。a'嗎? –

回答

4

但無法找到代碼屬性。這真的存在嗎,或者我可能是錯的。

它存在概念性,但它是一個內部屬性,不能從用戶代碼訪問。它被稱爲[[ECMAScriptCode]]。有關更多詳細信息,請參閱spec。但實際上,瀏覽器可以以任何他們想要的方式實現功能,只要它們的行爲與規範中描述的相同即可。


您可以在用戶代碼做的是調用該函數的toString method。這將返回函數本身的字符串表示形式,儘管確切的表示形式依賴於實現。

+0

非常感謝這個規範的鏈接! – Dexters

0

嘗試f.toString()其中f是您希望獲得的函數的源代碼。

+1

爲什麼會降低投票率? – zerkms

2

我相信你正在尋找的東西像下面這樣:

function f(){ 
    console.log("a = 1"); 
}; 

console.log(f.toSource()); 
console.log(f.toString()); 

https://jsfiddle.net/agraymd/ar5hgkv8/1/

.toSource然而,這不是一個標準功能。來自MDN:

此功能是非標準的,不在標準軌道上。不要 在面向Web的生產站點上使用它:它不適用於每個 用戶。 實現之間也可能存在大的不兼容性,並且行爲可能在將來發生變化。

function.toSring();似乎是一個更好的選擇,這是一個標準功能。更多關於這裏:

.toString();

+0

是的tosource似乎只爲壁虎引擎 – Dexters