Почему использование побочных эффектов плохо практикуется в конструкторах JavaScript?

Я использую что-то очень похожее на шаблон дизайна пользовательские объекты в моем коде нормально.

но JSLint хмурится на такие конструкции:

function MyClass() { this.init(); }
new MyClass(data);

потому что объект отбрасывается сразу после создания - он ни для чего не используется. Мы можем обмануть JSLint, чтобы игнорировать это, назначив его переменной, но это не меняет того, что JSLint (и я предполагаю, что многие энтузиасты JavaScript) препятствует шаблону.

Так почему использование побочных эффектов в конструкторе JavaScript рассматривается как плохая практика?

для чего это стоит, я думал, что это был хороший практика, потому что:

  1. у вас есть одна функция настройки, поэтому ее должно быть проще поддерживать, если, например, вы управляете списком экземпляров MyClass для доступа позже. (Нажатие объекта на массив является побочным эффектом, вам придется сделать это после того, как конструктор вернется, чтобы быть "хорошей практикой" = сложнее поддерживать.)
  2. он имеет свой собственный прототип, таким образом," собственность класса": Firebug сообщает об этом как экземпляр MyClass вместо просто объекта. (Это, на мой взгляд, делает его превосходящим другие шаблоны дизайна.)

1 ответов


в своей книге Код Роберт Мартин говорит

побочные эффекты-ложь. Ваша функция обещает сделать одну вещь, но она также делает другие скрытые вещи...они являются окольными и разрушительными недоразумениями, которые часто приводят к странным временным связям и зависимостям порядка.

то, что вы описали в своем комментарии относительно массивов, звучит как "странная временная связь".