Lesson depcrated with statement akan membahas penggunaan with yang sudah tidak disupport dan bagaimana menulis program yang lebih terbaca tanpa menggunakan statement with.
var obj = { a: { b: { c: 'hello' } } } console.log(obj.a.b.c);
Program diatas akan menampilkan kata hello. Namun , cara mengakses sub-object c cukup rumit. Oleh karena itu dapat digunakan with statement untuk mempermudah dalam mengakses sub-object.
var obj = { a: { b: { c: 'hello' } } } with(obj.a.b){ console.log(c); }
Dengan menggunakan with program terlihat lebih clean dan lebih mudah dalam mengakses sub object. Namun ada satu kasus dimana hal ini bisa mengacaukan jalannya program.
Mari kita tambahkan deklarasi variable seperti program dibawah (hal ini mungkin tidak terjadi dalam praktek, namun tujuan dari tutorial ini adalah menunjukan ada kemungkinan kesalahan karena cara JavaScript yang mengabaikan error secara diam-diam)
var obj = { a: { b: { c: 'hello' } } } var c = 'bye'; with(obj.a.b){ console.log(c); }
Karena behaviour JavaScript tentang scoping, maka pada program diatas, nilai c akan menjadi bye. Tentu ini bukan yang kita harapkan. Jika menggunakan strict mode, maka JavaScript akan menampilkan SyntaxError: Strict mode code may not include a with statement.
Pendekatan cara with diatas sendiri secara lexical memang bermasalah. Sekilas melihat program diatas, c yang mana yang dituju oleh block with?
Pada program kecil, tentu tidak sulit untuk melihat yang dimaksud, namun tentu dalam prakteknya program JavaScript akan besar dan cukup complex.
Seperti yang sudah dibahas diatas, statement with sudah deprecated. Berikut cara yang lebih dianjurkan.
var obj = { a: { b: { c: 'hello' } } } var c = 'bye'; (function (newVar){ console.log(newVar); }(obj.a.b.c)
Kesimpulan
Untuk best practice, jangan gunakan with statement. Karena with statement membuat program sulit dibaca dan dipahami. Selain itu, with statement memang sudah deprecated, walaupun masih bisa digunakan pada non strict mode.