2017-07-22 27 views
6

Trong javascript, có thể ghi đè thuộc tính hoặc phương thức của Object.prototype. Ví dụ:Làm thế nào để tránh ô nhiễm nguyên mẫu trong javascript?

Object.prototype.toString = function(){ 
    return "some string"; 
}; 

Nó có thể phá vỡ toàn bộ đơn nếu không được sử dụng cẩn thận. Có bất kỳ công cụ, kỹ thuật hoặc phương pháp nào để tránh điều này (ví dụ, một số loại 'chế độ nghiêm ngặt' không cho phép nhà phát triển ghi đè thuộc tính của đối tượng) không?

+4

Chỉ cần không làm điều đó và không thực hiện bất kỳ thư viện nào? – Paul

+3

'Object.freeze (Object.prototype)' sẽ giúp, nhưng một lần nữa .. không biết bao nhiêu ô nhiễm nó sẽ tạo ra –

+2

Một đọc tốt cho bất cứ ai mà đất trên câu hỏi này: https://esdiscuss.org/topic/ object-freeze-object-prototype-vs-reality –

Trả lời

5

Object.freeze(YourConstructor.prototype) có thể giúp bảo vệ đối tượng nguyên mẫu được liên kết của hàm tạo của bạn khỏi bị ẩn. Từ MDN:

Phương pháp Object.freeze() đóng băng một đối tượng: có nghĩa là, ngăn các thuộc tính mới được thêm vào đối tượng đó; ngăn chặn các thuộc tính hiện có bị xóa; và ngăn chặn các thuộc tính hiện có, hoặc tính khả dụng, khả năng cấu hình hoặc khả năng ghi của chúng, không bị thay đổi, nó cũng ngăn không cho nguyên mẫu bị thay đổi.

Nó hoạt động trên chính đối tượng, thay vì tạo bản sao bị đóng băng. Nó trả về cùng một tham chiếu mà bạn truyền nó.

Tốt nhất là chỉ để nguyên mẫu tích hợp sẵn, vì vậy hãy sử dụng nó trên Object.prototype và đó có thể không phải là một ý tưởng tuyệt vời. :-) Chắc chắn bạn cần phải thực hiện thử nghiệm nếu bạn đã thực hiện ... Xem this thread trên danh sách gửi thư thảo luận chung để biết thông tin hữu ích, có liên quan.

+0

hmm, nhưng một điều đơn giản tôi muốn thêm (hoặc có thể được hỏi), là gì điểm của việc này nếu một số cuộc tấn công de-tham khảo 'Object' chính nó? –

+2

@KoushikChatterjee Những kỹ thuật này chỉ có thể giúp ngăn chặn các bên thứ ba khỏi * vô tình * vi phạm ứng dụng của bạn. Họ không bao giờ có thể * an toàn * nó chống lại kẻ tấn công. Nếu bạn có bất kỳ ai chạy mã không bị hạn chế trên trang của mình, bạn đã bị mất. – Bergi

+0

+1 vì bạn có thể khóa cửa nhưng không thể đặt bẫy gấu trong nhà mình, đó không phải là cách bảo mật hoạt động. – Remi

Các vấn đề liên quan