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, которые способны обнаруживать незадекларированные или неиспользуемые функции.

Другие вопросы по тегам