Подтвердить что ты не робот

Есть ли способ сделать "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 какой-либо скрытый "предупреждающий объект предупреждение" в любом браузере, чтобы я мог знать, когда пытаюсь мутировать объект Object.frozen.

4b9b3361

Ответ 1

Код в строгом режиме будет бросать TypeError при попытке присвоить нерушимое свойство (ECMA-262: 11.13.1). Но обратите внимание, что вы не можете полагаться на ошибку, возникающую в браузерах, которые не поддерживают полностью жесткий режим ES5 (например, IE9).

Чтобы сделать код в строгом режиме, добавьте 'use strict'; в начале файла JS или функции, содержащей код, и запустите его в среде, которая реализует строгий режим (см., например, этот список: http://caniuse.com/#feat=use-strict).