Есть ли способ заставить объект "Object.frozen" выдавать предупреждения при попытке изменить его?

Я использую Object.freeze как средство предотвращения нарушения собственных правил. Я бы хотел, чтобы Object.freeze говорил со мной, когда я пытаюсь сделать плохое задание. Однако Object.freeze просто заставляет задания молча проваливаться! Например, если я сделаю

/*
 * Frozen singleton object "foo".
 */
var foo = (function() {
  var me = {};

  me.bar = 1;

  if (Object.freeze) {
    Object.freeze(me);
  }

  return me;
})();

foo.bar = 2;
console.log(foo.bar);

консоль выдаст "1", но я не буду знать, что сделал плохое задание. Это, конечно, может привести к опасному неожиданному поведению в моем коде, когда весь смысл замораживания объекта заключался в том, чтобы избежать неожиданностей. На самом деле, я с большей вероятностью получу многословный вывод об ошибке, если не заморожу объект, позволю неправильному присваиванию произойти, и мой код позже не сработает из-за неправильного значения.

Мне интересно, есть ли в JavaScript какая-нибудь скрытая прагма "immutable object warning" в каком-нибудь браузере, чтобы я мог знать, когда пытаюсь изменить объект "Object.frozen".

16
задан Milosz 2 February 2012 в 20:39
поделиться