2015-05-12 9 views
6

Questa potrebbe essere una domanda stupida ma non ho trovato una risposta. Perché non possiamo fare quanto segue?Perché non è possibile impostare la finestra o il documento su indefinito o nullo?

window = undefined 

O

document = undefined 

So quelli sono globali e sono disponibili nei browser, ma pensando a come funziona JavaScript, non è possibile? Sono quelli rivalutati ogni volta che proviamo ad accedervi?

Sono interessato a sapere come i window o document oggetti rimangono quello che sono, anche dopo di loro impostazione ad un valore casuale anche ... può essere un number o undefined o null.

+0

Non ho mai pensato a questo proposito, mi piacerebbe pensare che l'interprete semplicemente non consente l'assegnazione di valori a questi oggetti. La finestra – dave

+0

è il CONTESTO del javascript in esecuzione e la sua implementazione è definita dal fornitore del browser, dovresti chiedere a mozilla devs. il documento è l'oggetto dom, quindi indovina cosa sono –

+0

Sono d'accordo ma sembra una restrizione forzata che non è documentata (o probabilmente lo è ma non lo so). L'effetto rimane lo stesso anche se dichiaro una variabile con stesso nome es 'var document'. Se questi sono riservati in qualche modo, l'interprete dovrebbe generare errori. –

risposta

4

Secondo the standard:

L'attributo finestra deve tornare WindowProxy oggetto del contesto di navigazione dell'oggetto Window. L'attributo del documento deve restituire l'oggetto Document più recente dell'oggetto Window.

Significato window è il contesto in cui vengono valutati tutti gli script. Se fosse scrivibile, quanto sopra non reggerebbe e l'implementazione non seguirà le specifiche, quindi non è scrivibile.
Per motivi simili è possibile aggiungere proprietà a document ma non è possibile sovrascriverlo.

È possibile verificare questo guardando l'IDL:

[Unforgeable] readonly attribute WindowProxy window; 
[Unforgeable] readonly attribute Document document; 
+0

come su 'document'? –

+0

dopo la modifica - quindi non dovrebbe punirti lanciando errori nella console per lo stesso .. "Questo browser non ti permetterà di bombardare tutto .." o qualcosa di simile. –

+1

@TheWarlock Non riesco a ricordare la parte superiore della mia testa se la specifica definisce se scrivere in un readonly dovrebbe fallire o meno. – Nit

0

window è il contesto. Non puoi fare this = something altro. document è di proprietà della finestra. Non è scrivibile o configurabile.

Object.getOwnPropertyDescriptor(window, 'document'); 

uscita

Object {value: document, 
    writable: false, 
    enumerable: true, 
    configurable: false} 
+0

OP non farebbe' this = something', ma 'window = something'. – Bergi

+0

nel contesto della finestra del browser è lo stesso – webduvet

+1

Sì, nello scope globale sia 'window' che' this' si riferiscono allo stesso oggetto. Ma non funzionano allo stesso modo, e che "questo" non è assimilabile non significa nulla per la variabile 'window'. – Bergi

Problemi correlati