Показывать значения вместо функций получения/установки в представлении переменных Firefox DevTools

При проверке объекта JavaScript, который использует функции получения/установки для свойств (определяемых с помощью Object.defineProperties) в представлении переменных Firefox DevTools, он показывает определенные функции получения и установки для этого конкретного свойства:

введите описание изображения здесь

Есть ли способ показать фактический контент вместо функций в этом представлении?

Редактировать: как прокомментировал nils, просмотр фактического содержимого технически означает вызов геттера.


person Marc    schedule 26.07.2016    source источник
comment
Я бы тоже хотела получить ответ на этот вопрос! (Предполагая, что под фактическим содержанием вы подразумеваете вызов геттеров для получения текущего значения).   -  person nils    schedule 26.07.2016
comment
Если акт наблюдения, т.е. вызов геттера изменяет состояние кода (например, счетчик получения или что-то еще), что ожидается от отладчика?   -  person Brian    schedule 27.07.2016
comment
@ Брайан, вопрос в том, как инструмент разработчика Chrome достигает такого поведения?   -  person Marc    schedule 28.07.2016
comment
Chrome DevTools отображает значение, но иногда оно не является текущим, а иногда вызывает геттер. Простой пример: добавьте obj.counter в качестве контрольного выражения для var obj = {i:0, get counter() { return this.i++; }}, а затем переключитесь между панелями. Вы увидите, как значение увеличивается. И когда obj.counter выполняется через командную строку, значение не обновляется в выражении наблюдения.   -  person Sebastian Zartner    schedule 13.09.2016
comment
Кстати. Firebug всегда отображает текущее значение, но поэтому несколько раз вызывает геттер, что увеличивает значение. См. superuser.com/a/1122160/324429.   -  person Sebastian Zartner    schedule 13.09.2016


Ответы (3)


Начиная с Firefox 65, геттер можно вызвать с помощью кнопки рядом с ним внутри зарегистрированного объекта.

Кнопка для вызова геттера

Это было реализовано в ошибке 820878 соответственно. выпуск 6140 на GitHub.

В версиях до Firefox 65 вы могли вывести возвращаемое геттером значение, просто вызвав его напрямую через командную строку.

person Sebastian Zartner    schedule 13.09.2016
comment
Согласно последнему комментарию проблема была просто перенесена на GitHub. - person Sebastian Zartner; 19.01.2018
comment
Задача снова перемещена — теперь на github.com/devtools-html/debugger. .html/issues/6140 - person dotnetCarpenter; 28.06.2018
comment
@dotnetCarpenter Спасибо за подсказку! Я обновил ответ соответственно. - person Sebastian Zartner; 28.06.2018

Альтернативой является использование этого обходного пути вместо регистрации объекта:

console.log(objectVar)

Вы можете назначить текущее состояние пустому объекту, а затем зарегистрировать его:

console.log(Object.assign({}, objectVar)) // works on all browsers
// OR
console.log({...objectVar}) // es6 only

Примечание: писать это быстро становится утомительно, поэтому, если вы используете редактор кода (Atom/VScode), вы можете добавить это как фрагмент

Вот пример фрагмента, где вы можете просто ввести «l», а затем нажать клавишу Tab:

'.source.js':
  'console.log object':
    'prefix': 'l'
    'body': "console.log('${1:variable}', Object.assign({}, ${1:variable}))"

ИЛИ для ES6:

'.source.js':
      'console.log object':
        'prefix': 'l'
        'body': "console.log('${1:variable}', {...${1:variable}})"
person kiwicopple    schedule 15.11.2017

Firefox будет неправильно отображать свойства объекта, собранные, например, из API, но значения, созданные мгновенно в контексте, отображаются правильно. Я нашел обходной путь с помощью библиотеки lodash (https://lodash.com/). с другой инфраструктурой js, которая может полностью клонировать объект.

  console.dir(_.cloneDeep(objectToShowInConsole))

Надеюсь, поможет.

person hadankar    schedule 13.04.2018