JavaScript: предотвращение непреднамеренного создания нового свойства
Опечатки случаются, и иногда действительно трудно отследить их в JavaScript. Возьмем, к примеру, это (представьте, что это между кодом):
// no error. I would like a warning
document.getElementById('out').innerHtml = "foo";
Для необъявленных переменных строгий режим помогает:
"use strict";
var myHTML = "foo";
myHtml = "bar"; // -> error
Но это не работает для примера выше. Есть ли программа или режим, который может поймать эти ошибки? Я пробовал JSLint и JavaScript Lint, но они не ловят это.
И в идеале я хотел бы, чтобы это все еще работало (без предупреждения):
// should work (without warning)
function MyClass(arg) {
this.myField = arg;
}
2 ответа
Использование IDE, такого как WebStorm, очень помогает в обнаружении ошибок такого рода.
Чтобы предотвратить случайное добавление свойств к объекту, вы можете заморозить его: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
С ES6 вы можете использовать прокси для обнаружения этих ошибок: http://www.nczonline.net/blog/2014/04/22/creating-defensive-objects-with-es6-proxies/
Ну, вот цена динамически типизированных языков программирования. поскольку можно добавлять свойства во время выполнения, реального решения для обнаружения опечаток в коде нет.
Вы могли бы однако добавить innerHtml
функция к Element
прототип, внутренний вызов innerHTML
чтобы устранить некоторые опечатки, но я определенно не рекомендовал бы это.
Как уже предлагалось в других комментариях: хорошая IDE может помочь вам определить опечатки. Я работаю только с WebStorm и VisualStudio, которые способны обнаруживать незадекларированные или неиспользуемые функции.