0

Ich hatte eine Frage zu JavaScript-Funktionen. Ich lese Funktionen als Objekte, wo wir auch Eigenschaften und Methoden zu den Funktionen hinzufügen können, aber ich bemerke ein seltsames Verhalten, wenn ich die Funktion mit der hinzugefügten Eigenschaft auslogge. Hier ist ein kleines Beispiel, das ich mit Objekt und Funktion gemacht habe.JavaScript Funktionen als Objekte

//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');} 

Wie erwartet die ‚Greet‘ Eigenschaft hat myFunction hinzugefügt worden, aber wenn ich myFunction ausloggen ich das Eigentum nicht sehen ausdrucken. Warum? Wo wurde die Immobilie hinzugefügt? Wenn ich mit dem Punktoperator auf die Eigenschaft zugreife, sehe ich das Ergebnis abmelden.

Kann jemand erklären, wo die Eigenschaft hinzugefügt wurde und wo sie gespeichert wird?

+0

Die Eigenschaft ist dort, Sie können es nur nicht mit 'console.log' sehen. Verschiedene Browser zeigen die Dinge anders an. – 4castle

Antwort

1

Sie könnten die eigenen Eigenschaften mit Object.keys der Funktion erhalten.

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

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

1

Der Browser sieht, dass die Variable eine Funktion ist, also, wenn Sie die Variable ausloggen, versucht er es in der Konsole in nützlicher Weise in den Entwickler zu drucken. Normalerweise betrachten wir Funktionen nicht als Dinge, die zusätzliche Eigenschaften haben. Daher versucht die Implementierung von console.log nicht, Ihnen diese Informationen zu zeigen. Aber die Sache, die Sie von console.log sehen, ist nicht wirklich an die tatsächlichen Mechanismen der Sprache gebunden, sondern dient nur dazu, die Dinge für den Entwickler leicht verständlich zu machen. Diese Eigenschaften werden auf dieselbe Weise am selben Ort (RAM) gespeichert wie für andere Objekte.