Question

La fixation d'un descripteur de propriété comme ceci:

Object.defineProperty(window, 'someFunction', {
    value: function() { alert('safe'); },
    writable: false,
    enumerable: false,
    configurable: false
});

...devrait, autant que je sache, faire de la someFunction propriété de window non accessible en écriture.Il travaille pour les expressions de fonction comme je l'attends, si la fonction est directement affectée à la propriété de l'objet... violon

window.someFunction = function() { alert('boom!'); }
someFunction(); // safe

...ou assignée à une variable globale: violon

var someFunction = function() { alert('boom!'); }
someFunction(); // safe

Cependant, il ne semble pas fonctionner avec les déclarations de fonction: violon

function someFunction() { alert('boom!'); }
someFunction(); // boom!

Est-ce un comportement intentionnel?Quel est le raisonnement derrière cela?Est-ce documenté nulle part?Ou suis-je juste une sorte de stupide erreur?


En passant, je suis en utilisant Chrome 17 pour tester cela.Le mode Strict ne semble pas faire de différence.

Était-ce utile?

La solution

C'est un bug (voir le Bogue #115452), que j'ai également rencontrés lors de la réponse cette question.

Vérification de la compatibilité: Cas de Test

  • Dans Firefox 4+, il fonctionne très bien.
  • Dans google Chrome 16, il fonctionne très bien.
  • Dans Chrome 17, il ne fonctionne pas.
  • IE8 - n'a pas Object.defineProperty, de sorte qu'il ne fonctionne pas
  • Dans IE9, il ne fonctionne pas.
  • Dans Safari 5, il ne fonctionne pas.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top