0

我有一個關於JavaScript函數的問題。我讀函數作爲對象,我們可以在函數中添加屬性和方法,但是當我註銷添加屬性的函數時,我注意到一些奇怪的行爲。這是我用對象和函數拍攝的一個小例子。作爲對象的JavaScript函數

//Object Example 
var obj = { 
    firstName: 'John', 
    lastName: 'Doe', 
}; 
obj.address = '111 Main St. New York, NY'; 
console.log(obj); // Object {firstName: "John", lastName: "Doe", address: "111 Main St. New York, NY"} 

//Function Example 
function myFunction() { 
    console.log('Hello World'); 
} 
myFunction.greet = 'Hello JavaScript!'; 
console.log(myFunction); // function myFunction() { console.log('Hello World');} 

正如預期的「迎接」屬性已添加到myFunction的,但是當我退出myFunction的我不的見的財產打印出來。爲什麼?該物業已添加到哪裏?而當我使用點運算符訪問屬性時,我看到註銷的結果。

有人可以解釋屬性已添加的位置以及存儲位置嗎?

+0

該屬性在那裏,你只是不能用'console.log'來看它。不同的瀏覽器會顯示不同的東西。 – 4castle

回答

1

您可以使用該函數的Object.keys獲得自己的屬性。

function myFunction() { 
 
    console.log('Hello World'); 
 
} 
 
myFunction.greet = 'Hello JavaScript!'; 
 

 
console.log(Object.keys(myFunction));

1

瀏覽器看到該變量的函數,所以當你登出變量,它試圖將其打印在控制檯中開發的有效途徑。通常我們不把函數視爲具有附加屬性的東西,所以無論實現console.log都不會試圖向您顯示這些信息。但是你從console.log中看到的東西並不真正與語言的實際機制相關聯,只是爲了讓開發人員容易理解。這些屬性以與其他對象相同的方式存儲在相同的地方(RAM)。

相關問題