Để deep-freeze (đóng băng sâu) một đối tượng trong JavaScript, bạn cần đảm bảo rằng tất cả các thuộc tính và giá trị con của đối tượng cũng bị đóng băng. Điều này có thể được thực hiện bằng cách sử dụng hàm đệ quy để duyệt qua tất cả các thuộc tính của đối tượng và áp dụng Object.freeze()
cho từng thuộc tính.
Dưới đây là cách bạn có thể thực hiện deep freeze một đối tượng:
function deepFreeze(obj) { // Đóng băng đối tượng hiện tại Object.freeze(obj); // Lặp qua tất cả các thuộc tính của đối tượng Object.keys(obj).forEach((key) => { const value = obj[key]; // Nếu thuộc tính là một đối tượng và chưa bị đóng băng if (value && typeof value === 'object' && !Object.isFrozen(value)) { deepFreeze(value); // Đệ quy để đóng băng đối tượng con } }); return obj; // Trả về đối tượng đã được đóng băng } // Ví dụ sử dụng const person = { name: 'Alice', age: 30, address: { city: 'Wonderland', zip: '12345' } }; // Đóng băng đối tượng person deepFreeze(person); // Thử thay đổi thuộc tính person.age = 31; // Không có tác dụng person.address.city = 'New Wonderland'; // Không có tác dụng console.log(person); // { name: 'Alice', age: 30, address: { city: 'Wonderland', zip: '12345' } }
deepFreeze
kiểm tra từng thuộc tính của đối tượng. Nếu thuộc tính là một đối tượng (và không phải là một giá trị nguyên hoặc null), nó sẽ gọi lại chính nó để đóng băng thuộc tính đó.Bằng cách sử dụng hàm deepFreeze
, bạn có thể dễ dàng đóng băng một đối tượng và tất cả các đối tượng con của nó, đảm bảo rằng dữ liệu của bạn không thể bị thay đổi sau khi đã được xác định.