2016-08-05 9 views
0

Es scheint, dass Funktionen des fehlen [[Wert]] Eigenschaft zuzuschreiben, die auf anderen Objekteigenschaften vorhanden ist:Warum haben Funktionen kein Attribut [[Value]]?

function a() { 
    console.log('Hello World'); 
} 

var descriptor = Object.getOwnPropertyDescriptor(window, 'a'); 

// descriptor contains: 

Object {writable: true, enumerable: true, configurable: false} 

Im Vergleich zu:

var person = { 
    age: 1 
}; 

var descriptor2 = Object.getOwnPropertyDescriptor(person, 'age'); 

// descriptor2 contains: 

Object {value: 1, writable: true, enumerable: true, configurable: true} 

Warum ist ein [[Wert nicht da ]] Attribut wie die meisten regulären Objekteigenschaften? Ich würde erwarten, dass es den eigentlichen Funktionscode enthalten würde, aber es sieht so aus, als ob es für Funktionen nie existiert?

+0

Der Quellcode der Funktion als String, denke ich? – technico

+4

Haben Sie den Deskriptor in der Konsole erweitert? –

+0

Ich bekomme 'Object {value: a(), beschreibbar: true, aufzählbar: true, konfigurierbar: false}' –

Antwort

4

Ob der Wert der Eigenschaft eine Funktion oder eine Zahl ist, spielt für den Deskriptor/die Eigenschaft keine Rolle. Und der Beschreiber hat eine value Eigenschaft: enter image description here

Wie die Konsole funktioniert nicht standardisiert ist, also warum etwas ist, oder wird nicht angezeigt, ist die Umsetzung abhängig.

Vertrauen Sie nicht blind der Konsole, überprüfen Sie Ihre Annahmen mit Code.

+0

Danke - console.dir() zeigte den Wert attr für mich: http: //www.i.imgur. com/1PF46GO.jpg –

+0

Könnte etwas mit den neuen Scoping-Regeln in ES6 zu tun haben, und 'window.a' ist nicht einmal die Funktion. – Bergi

0

Das ist, weil Sie einen Browser verwenden, der den Wert für irgendeinen Unsinngrund verbirgt. Benutze einfach einen anderen mit besseren Devtools.

Selbst die so einfache Stack-Schnipsel-Konsole zeigt den Wert richtig:

function a() { 
 
    console.log('Hello World'); 
 
} 
 
console.log(Object.getOwnPropertyDescriptor(window, 'a'));

Verwandte Themen