2017-03-18 2 views
0

Beim Versuch, ein globales (Fenster-) Objekt zu löschen, bin ich auf folgendes Verhalten gestoßen und ich habe mich gefragt, ob jemand die Gründe für die Einstellung von propertydescriptors erklären könnte.Kann jemand diesen getOwnPropertyDescriptor erklären und das Verhalten löschen?

enter image description here

Ich verstehe nicht, wie dies Sinn macht. Danke.

Firefox 52.0.1 (32-Bit) Windows 7.

+0

'var'-deklarierte Eigenschaften der globalen Objekte sind nicht konfigurierbar, aber die Deklarationen ändern nicht die Eigenschaften der bereits vorhandenen Eigenschaften (' window.dog = 1' vs. nein 'window.cat = ...') – Bergi

+1

... und hättest du all das in ein Skript geschrieben, wären die 'var' Deklarationen gehisst worden, also wären beide Eigenschaften nicht konfigurierbar. – Bergi

Antwort

2

Wenn Sie schreiben:

window.dog = 1; 

Sie sind explizit eine neue Eigenschaft auf dem globalen window Objekt erstellen dog genannt. Wenn es erstellt wird, wird es mit seinem configurable Schalter erstellt, der auf true gesetzt wird. Die Tatsache, dass Sie dann

var dog = 6; 

erklären nicht die Tatsache ändern, dass die Eigenschaft bereits explizit erstellt.

Wenn Sie erklären:

var cat = 9; 

Sie sind implizit eine Eigenschaft zu schaffen cat auf dem globalen window Objekt aufgerufen. Auf diese Weise erstellt, hat die Eigenschaft configurable Schalter auf false festgelegt.

Der Punkt ist, dass globale Eigenschaften in der Regel eine schlechte Sache sind und in den seltenen Fällen, wenn Sie eine wollen, ist es am besten, es explizit zu sein, aus Gründen der Lesbarkeit, sondern auch (wie Sie herausgefunden haben) größte Flexibilität bei der Arbeit mit ihnen.

+0

Danke. Ich bin kein Fan von Globals. Umfang war nicht mein Problem. Meine Frage war über dieses Verhalten. Dies alles kam zustande, weil ich versuchte, eine Funktion zu löschen und festgestellt, dass je nachdem, wie es erstellt wurde, habe ich unterschiedliche Ergebnisse. Meine Frage bleibt also: Was ist der Grund dafür? Ich nehme an, weil es einen Unterschied gibt, gibt es einen Grund dafür. –

+0

Ich habe keine Ahnung was du sagst. Dies ist genau der Grund, warum dies passiert. Ich habe die Gründe dafür erklärt. –

+0

Also, für Globals, eine "var" wird im "window" -Objekt platziert, und für "var" s innerhalb einer Funktion werden sie platziert ... wo? –

Verwandte Themen