Чтобы установить свойство в объекте, которое нельзя изменить, удалить или установить, вы можете использовать defineProperty или defineProperties.
Если вы хотите заблокировать весь объект, вы можете использовать для этого методы freeze, seal и preventExtensions.
Вы можете добавлять атрибуты, удалять атрибуты, изменять атрибуты, предотвращать расширения (preventExtensions).
Буквально означает "заморозить". Вы не можете добавлять атрибуты, удалять атрибуты или изменять атрибуты. Это то же самое, как если бы значение configable было установлено в false.
Значения небазовых типов, таких как объекты, массивы и т.д., ими все равно можно манипулировать.
Чтобы определить, заморожен ли объект, используйте Object.isFrozen(). Это вернет true, если объект заморожен, или false, если нет.
let obj = { a: 1, b: 2, c: {} }; Object.freeze(obj); obj.a = 2; console.info(obj); // {a: 1, b: 2, c: {}} => a 依然是 1 無法被覆寫 delete obj.a; // false => 無法刪除 console.info(obj); // {a: 1, b: 2, c: {}} obj.d = 4; console.info(obj); // {a: 1, b: 2, c: {}} => 無法新增 obj.c.say = 'Hello'; console.info(obj); // {a: 1, b: 2, c: {say: 'Hello'}} // obj.c 是一個物件,可以新增、修改、刪除,不受 freeze 影響
Seal
console.info(Object.isFrozen(obj)); // true console.info(Object.isSealed(obj)); // true,不能覆寫、刪除、新增,等同被封閉 console.info(Object.isExtensible(obj)); // false => 不能擴充所以回傳 false
Использование: Object.seal(obj)
Чтобы определить, запечатан ли объект, используйте Object.isSealed(). Если он запечатан, то будет возвращено true, если нет - false.
let obj = { a: 1, b: 2, c: {} }; Object.seal(obj); obj.a = 2; console.info(obj); // {a: 2, b: 2, c: {}} => a 可以被覆寫 delete obj.a; // false => 但是不能刪除 console.info(obj); // {a: 1, b: 2, c: {}} obj.d = 4; console.info(obj); // {a: 1, b: 2, c: {}} => 也無法新增 obj.c.say = 'Hello'; console.info(obj); // {a: 1, b: 2, c: {say: 'Hello'}} // obj.c 是一個物件,可以新增、修改、刪除,不受 seal 影響
PreventExtensions
console.info(Object.isSealed(obj)); // true console.info(Object.isFrozen(obj)); // false => 還能被覆寫,不是被凍結 console.info(Object.isExtensible(obj)); // false => 不能擴充所以回傳 false
Замороженными объектами нельзя манипулировать, но только для атрибутов подуровня. Если свойство
Использование: Object.preventExtensions(obj)
let obj = { a: 1, b: 2, c: {} }; Object.preventExtensions(obj); obj.a = 2; console.info(obj); // {a: 2, b: 2, c: {}} => a 可以被覆寫 delete obj.a; // false => 可以刪除 console.info(obj); // {b: 2, c: {}} obj.d = 4; console.info(obj); // {b: 2, c: {}} => 但無法擴充所以不能新增 obj.c.say = 'Hello'; console.info(obj); // {b: 2, c: {say: 'Hello'}} // obj.c 是一個物件,可以新增、修改、刪除,不受 preventExtensions 影響
Чтобы определить, является ли объект расширяемым, используйте Object.isExtensible(). Если объект установлен на заморозку или печать, он вернет false, если не может добавлять атрибуты.
console.info(Object.isExtensible(obj)); // false => 因為被設置了 preventExtensions console.info(Object.isFrozen(obj)); // false => 還能被覆寫,不是被凍結 console.info(Object.isSealed(obj)); // false => 可以修改、刪除,不是被封閉
Независимо от того, используете ли вы freeze, seal или preventExtensions, вы не сможете их снять, если они установлены, поэтому помните об этом, прежде чем использовать их. Однако есть способ сделать это с помощью Object.assign(), чтобы клонировать копию объекта и перезаписать исходные переменные. Если вы используете const для установки константы, вам не повезло.
let obj = { a: 1, b: 2, c: {} }; Object.freeze(obj); console.info(Object.isFrozen(obj)); // true obj = Object.assign({}, obj); console.info(Object.isFrozen(obj)); // false // 如果用 const obj = {} 那就連 assign 也無法解除了
20.03.2023 14:01
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а также новые инструменты веб-скраппинга с открытым исходным кодом для их обхода.
20.03.2023 12:24
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие действия:
20.03.2023 11:15
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц. HTML обеспечивает структуру страницы CSS (визуальное и звуковое) оформление для различных устройств. Наряду с графикой и сценариями HTML и CSS являются...
20.03.2023 08:46
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
19.03.2023 13:43
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем запускать наши php-файлы через localhost на наших компьютерах. Мне с трудом удалось установить его и я решил поделиться этой статьей, чтобы помочь тем,...
19.03.2023 13:03
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после поставщика контекста. Это позволит избежать ненужных повторных рендеров.