Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Ngăn chặn sửa đổi Object trong JavaScript (preventExtensions, seal, freeze)


ES5 cung cấp 3 mức độ bảo vệ object tăng dần:

1) Prevent Extensions (Ngăn mở rộng)

Không thêm property/method mới. Vẫn truy cập/sửa/xóa property cũ được. Dùng Object.preventExtensions().

Ví dụ

<html> <body> <script> var object1 = { prop1: 1 }; Object.preventExtensions(object1); delete object1.prop1; // OK try { Object.defineProperty(object1, 'prop2', { value: 2 }); } catch (err) { document.write(err); } document.write("</br>"); document.write(object1.prop1); </script> </body> </html>

Kết quả

TypeError: Cannot define property prop2, object is not extensible undefined

2) Seal (Niêm phong)

Tương tự preventExtensions + không xóa được property cũ. Dùng Object.seal().

Ví dụ

<html> <body> <script> var object1 = { prop1: 1 }; Object.seal(object1); object1.prop1 = 2; // OK sửa giá trị delete object1.prop1; // FAIL try { Object.defineProperty(object1, 'prop2', { value: 2 }); } catch (err) { document.write(err); } document.write("</br>"); document.write(object1.prop1); // 2 vì seal không cho xóa nhưng cho sửa </script> </body> </html>

Kết quả

TypeError: Cannot define property prop2, object is not extensible 2

3) Freeze (Đóng băng)

Seal + không sửa được property hiện có (immutable). Dùng Object.freeze().

Ví dụ

<html> <body> <script> var object1 = { prop1: 1 }; Object.freeze(object1); object1.prop1 = 2; // FAIL im lặng (strict mode throw) delete object1.prop1; // FAIL try { Object.defineProperty(object1, 'prop2', { value: 2 }); } catch (err) { document.write(err); } document.write("</br>"); document.write(object1.prop1); // Vẫn là 1 </script> </body> </html>

Kết quả

TypeError: Cannot define property prop2, object is not extensible 1