Функции 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');}
Как и ожидалось, свойство 'greet' было добавлено в myFunction, но когда я выхожу из myFunction, я не вижу, как распечатывается свойство. Зачем? Где была добавлена недвижимость? Принимая во внимание, что когда я получаю доступ к свойству с помощью оператора точки, я вижу выход из системы.
Может кто-нибудь объяснить, где свойство было добавлено и где оно хранится?
2 ответа
Вы можете получить собственные свойства с Object.keys
функции.
function myFunction () {
console.log('Hello World');
}
myFunction.greet = 'Hello JavaScript!';
console.log(Object.keys(myFunction));
Браузер видит, что переменная является функцией, поэтому, когда вы выходите из нее, он пытается напечатать ее в консоли удобным для разработчика способом. Обычно мы не рассматриваем функции как вещи, которые имеют дополнительные свойства, поэтому независимо от того, что реализует console.log, мы не пытаемся показать вам эту информацию. Но то, что вы видите в console.log, на самом деле не связано с реальной механикой языка, оно просто для того, чтобы упростить понимание для разработчика. Эти свойства хранятся таким же образом, в том же месте (ОЗУ), что и для других объектов.