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

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

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

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

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

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

4b9b3361

Ответ 1

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

Button to invoke a getter

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

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

Ответ 2

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

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}})"

Ответ 3

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

  console.dir(_.cloneDeep(objectToShowInConsole))

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