Недавно я заметил, что когда режим "use strict";
включен в браузерах, многие свойства на нативных объектах становятся неурегулированными.
Например
function() {
"use strict";
var div = document.createElement("div");
div.offsetLeft = 0;
}();
Игнорируйте тот факт, что установка offsetLeft
глупа. Это не главное.
Если вы запустите это в Chrome или Firefox, вы получите сообщение об ошибке
Uncaught TypeError: Cannot set property offsetLeft of #<HTMLElement> which has only
a getter(…)
Удалите "use strict";
, и ошибка исчезнет.
Итак, вот проблема. Позвольте изменить offsetLeft
на то, что я могу использовать в своем собственном коде
function createElementAndAssociateData(data) {
"use strict";
var div = document.createElement("div");
div.userdata = data;
};
Это отлично работает, за исключением 2 лет с новой спецификации HTML5 и решает, что для всех HTMLElements атрибут userdata
доступен только для чтения. Внезапно мой код разбивается везде, где я использовал "use strict";
.
Ожидается ли это бомба замедленного действия, поскольку все больше и больше свойств добавляются к собственным объектам HTML5?
Существует ли безопасный способ использования "use strict";
и добавления пользовательских свойств к собственным объектам HTML5 или добавление какого-либо свойства к собственному объекту браузера никогда не будет выполнено?
Примечание. Я не считаю, что устранение имен свойств является приемлемым решением. Конечно, я мог бы изменить userdata
на mycompanyname_myappname_userdata
, но такой вид рядом с точкой. Есть ли какое-то другое решение или добавляет пользовательские свойства к собственным объектам HTML5 в строгом режиме анти-шаблон?