Tôi đang đọc es5 những ngày này và thấy rằng thuộc tính [[configureable]] trong một số thuộc tính tích hợp của đối tượng toàn cầu được đặt thành true, điều đó có nghĩa là chúng ta có thể xóa các thuộc tính này.
Ví dụ:
phương thức nối của đối tượng Array.prototype có các thuộc tính
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
Vì vậy, chúng ta có thể dễ dàng xóa phương thức nối cho Array như:
delete Array.prototype.join;
alert([1,2,3].join);
Cảnh báo sẽ hiển thị undefined
trong crom 17 của tôi, firefox 9, tức là 10, thậm chí tức là6;
Trong Chrome 15 & safari 5.1.1, thuộc tính [[có thể định cấu hình]] được đặt thành đúng và kết quả xóa cũng đúng nhưng kết quả cuối cùng vẫn là function(){[native code]}
. Có vẻ như đây là một lỗi và crom sửa nó.
Tôi đã không nhận thấy điều đó trước đây. Theo tôi, xóa các hàm tích hợp trong mã của người dùng là nguy hiểm và sẽ phát sinh rất nhiều lỗi khi làm việc với người khác. Tại sao ECMAScript đưa ra quyết định này?