J'ai remarqué récemment que lorsqu' "use strict";
mode dans les navigateurs de nombreuses propriétés sur les objets deviennent unsettable.
Par exemple
function() {
"use strict";
var div = document.createElement("div");
div.offsetLeft = 0;
}();
Ignorer le fait que la fixation d' offsetLeft
est stupide. Ce n'est pas le point.
Si vous exécutez ce code dans Chrome ou Firefox, vous recevrez un message d'erreur
Uncaught TypeError: Cannot set property offsetLeft of #<HTMLElement> which has only
a getter(…)
Supprimer l' "use strict";
et l'erreur disparaît.
Alors, voici le problème. Changeons offsetLeft
de quelque chose que je pourrais utiliser dans mon propre code
function createElementAndAssociateData(data) {
"use strict";
var div = document.createElement("div");
div.userdata = data;
};
Cela fonctionne très bien, à l'exception de 2 ans à partir d'un nouveau spec HTML5 arrive et décide que tous les Élémentshtml ont userdata
attribut en lecture seule. Tout à coup, mon code s'arrête partout, j'ai utilisé "use strict";
.
Est-ce une bombe à retardement, car de plus en plus de propriétés sont ajoutées à HTML5 native des objets?
Est-il un moyen sûr d'utiliser "use strict";
et d'ajouter des propriétés personnalisées natif HTML5 objets ou devrait l'ajout de tout type de biens à un natif du navigateur d'objet ne jamais être fait?
Remarque: je ne crois pas obfusticating les noms de propriété est une solution acceptable. Sûr que je pourrais changer d' userdata
de mycompanyname_myappname_userdata
mais c'est un peu à côté de la question. Est-il une autre solution ou est l'ajout de propriétés personnalisées natif HTML5 objets en mode strict, un anti-modèle?