Saya membaca es5 hari ini dan menemukan bahwa atribut [[dapat dikonfigurasi]] di beberapa properti bawaan dari objek global disetel ke true yang berarti kita dapat menghapus properti ini.
Sebagai contoh:
metode join objek Array.prototype memiliki atribut
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
Jadi kita dapat dengan mudah menghapus metode bergabung untuk Array seperti:
delete Array.prototype.join;
alert([1,2,3].join);
Peringatan akan ditampilkan undefined
di chromium 17 saya, firefox 9, yaitu 10, bahkan ie6;
Di Chrome 15 & safari 5.1.1, atribut [[dapat dikonfigurasi]] disetel ke true dan hasil penghapusan juga benar tetapi hasil akhirnya tetap function(){[native code]}
. Sepertinya ini adalah bug dan memperbaikinya kromium.
Saya belum melihat itu sebelumnya. Menurut pendapat saya, menghapus fungsi built-in dalam kode pengguna berbahaya, dan akan mengeluarkan banyak bug saat bekerja dengan orang lain. Jadi mengapa ECMAScript membuat keputusan ini?