Perché una dichiarazione della funzione sovrascrive le proprietà non scrivibili dell'oggetto globale?
-
13-12-2019 - |
Domanda
Impostazione di un descrittore di proprietà come questo:
Object.defineProperty(window, 'someFunction', {
value: function() { alert('safe'); },
writable: false,
enumerable: false,
configurable: false
});
.
... dovrebbe, per quanto ne so, rendi la proprietà someFunction
di window
non scrivibile.Funziona per le espressioni di funzione come mi aspetto, se la funzione è assegnata direttamente alla proprietà dell'oggetto ... Fiddle
window.someFunction = function() { alert('boom!'); }
someFunction(); // safe
.
... o assegnato a una variabile globale: Fiddle Tuttavia, non sembra funzionare con dichiarazioni funzione : Fiddle
function someFunction() { alert('boom!'); }
someFunction(); // boom!
.
è questo comportamento intenzionale?Qual è il ragionamento dietro di esso?Questo è documentato ovunque?O sto solo facendo qualche tipo di errore stupido?
.
A proposito, sto usando Chromium 17 per testare questo.La modalità rigorosa non sembra fare alcuna differenza.
Soluzione
Questo è un bug (vedi bug # 115452) , che ho anche riscontrato quando risponde a Questa domanda .
Controllo di compatibilità: Cassa del test
- .
- In Firefox 4+, funziona bene.
- In Chrome 16, funziona bene.
- in Chrome 17, non funziona.
- IE8- non ha
Object.defineProperty
, quindi non funziona - In IE9, non funziona.
- In Safari 5, non funziona.