Есть ли способ удалить дескрипторы свойств с Object.defineProperty
? Дескриптор configurable
может быть true
. Удаление свойства и его добавление - это один из способов сделать это, но есть ли встроенный способ?Удалить дескрипторы свойств в Javascript
ответ
Object.defineProperty
технически не означает «набор дескрипторов свойств»; он устанавливает флаги, значение и getter/setter на основе дескриптора свойства. Поэтому нет смысла говорить «удалить дескриптор свойства»; имеет смысл сказать «удалить свойство» или «переопределить свойство».
Способ удаления объекта недвижимости - delete
. Если вы хотите добавить его обратно, то вы добавите его обратно.
Способ переопределить свойство - это переопределить его. Невозможно выборочно модифицировать некоторые из флагов свойства. Object.defineProperty
- это все или ничего. Поэтому, если вы хотите изменить что-то вроде writeable
, то да, вы должны снова позвонить Object.defineProperty
со всем набором новых ключей. Это аналогично вопросу о том, как добавить set
в свойство после того, как оно уже определено с помощью get
. Невозможно просто добавить set
. Вы должны переопределить имущество с помощью get
и a set
.
Вы можете позвонить Object.getOwnPropertyDescriptor
, чтобы получить дескриптор, содержащий текущие флаги и т. Д., Затем измените его и вызовите с ним Object.defineProperty
. Это полностью заменит предыдущее свойство (если оно будет настраиваться). Это не взлом; это просто способ сбросить флаги свойства. Кстати, нет особой необходимости в delete
.
Однако, как только вы установили свойство с флагом configurable
, установленным на false, вам в значительной степени не повезло. Мало того, что вы не можете переопределить это свойство, вы даже не можете удалить его, чтобы определить его заново.
Невозможно изменить дескриптор свойства, если для его флага configurable
установлено значение false. Как MDN states:
TypeError выбрасывается при попытке изменить атрибуты не конфигурируемые свойств (кроме записываемого атрибута), если текущие и новые значения не совпадают.
Итак, ваш Hacky подход является единственным способом для достижения этой цели.
Это означает, что по какой-либо причине свойства заданы как неконфигурируемые, и если ваше приложение полагается на возможность конфигурирования неконфигурируемых свойств, возможно, в вашем приложении есть запах кода.
Но также невозможно удалить свойство, если для его «настраиваемого» флага установлено значение false. –
- 1. do дескрипторы свойств javascript поддерживают пользовательские атрибуты?
- 2. Дескрипторы объекта Javascript
- 3. добавить/удалить дескрипторы сокетов из poll()
- 4. GUI-дескрипторы в классах
- 5. Umbraco узлы и дескрипторы
- 6. Изменить порядок свойств в представлении свойств
- 7. дескрипторы аудиоисточников USB 24bits
- 8. Дескрипторы файлов и файловые дескрипторы (и C)
- 9. псевдонимы свойств в JavaScript
- 10. Имена свойств в JavaScript
- 11. Удалить совпадения в OpenCV (ключевые точки и дескрипторы)
- 12. Дескрипторы в глобальном масштабе?
- 13. Дескрипторы файлов в C
- 14. Квантовать дескрипторы в OpenCV
- 15. передать массив объектов в дескрипторы
- 16. JQ удалить несколько свойств
- 17. Выбор нескольких свойств в Javascript или D3
- 18. PHP Maven недействительные дескрипторы
- 19. Поиск свойств в объекте javascript
- 20. Получение свойств объекта в JavaScript
- 21. Обработка неопределенных свойств в javascript
- 22. Копирование свойств объекта в JavaScript
- 23. Сравнение имен свойств в JavaScript
- 24. Добавление свойств переменных в JavaScript
- 25. Добавление свойств объекта в JavaScript
- 26. Определение свойств, которые нельзя удалить?
- 27. Сравнение свойств Javascript
- 28. Javascript - список всех свойств
- 29. Передача разметки HTML в дескрипторы
- 30. Mpeg 7 Дескрипторы в C++
, но если вы его удалите - вы просто полностью удалите, не так ли? но если ваша цель - оставить там свойство, почему бы просто не установить его на нуль? – Daemedeor
Я хочу удалить только дескрипторы свойств, а не значения свойств. Я бы сохранил значение во временной переменной, удалил его и вернул. Он работает в большинстве случаев, но кажется «взломанным». –