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, на самом деле не связано с реальной механикой языка, это просто для того, чтобы все было понятным для разработчика. Эти свойства сохраняются таким же образом, в том же месте (ОЗУ), что и для других объектов.