Lingkungan Objek ECMAScript
- Halaman sebelumnya Jenis objek
- Halaman berikutnya Definisi kelas atau objek
Lingkungan adalah lingkungan penggunaan variabel.
Lingkungan publik, pribadi dan dilindungi
Konsep
Dalam desain program orientasi objek tradisional, utamanya fokus pada lingkungan publik dan pribadi. Properti objek di lingkungan publik dapat diakses dari luar objek, yaitu setelah pengembang membuat instansi objek, mereka dapat menggunakan properti publiknya. Sementara properti di lingkungan pribadi hanya dapat diakses di dalam objek, yaitu bagi dunia luar, properti ini tidak ada. Ini berarti jika kelas mendefinisikan properti dan metode pribadi, turunannya tidak dapat mengakses properti dan metode ini.
Lingkungan yang dilindungi juga digunakan untuk mendefinisikan properti dan metode pribadi, tetapi properti dan metode ini masih dapat diakses oleh turunan kelas.
ECMAScript hanya memiliki lingkungan publik
Diskusi tentang ECMAScript di atas hampir tak berarti, karena di ECMAScript hanya ada satu lingkungan - lingkungan publik. Semua properti dan metode objek di ECMAScript adalah publik. Oleh karena itu, saat mendefinisikan kelas dan objek sendiri, harus berhati-hati. Ingat, semua properti dan metode secara baku adalah publik!
Cara pemecahan saran
Banyak pengembang yang mengajukan mode efek samping properti yang berkesan di internet, yang mengatasi masalah ECMAScript ini.
Karena kekurangan lingkungan akses pribadi, para pengembang menetapkan suatu konvensi, yang menyatakan bahwa properti dan metode mana yang seharusnya dianggap pribadi. Konvensi ini menentukan untuk menambahkan garis bawah di depan dan belakang properti:
obj._color_ = "blue";
Di kod ini, properti color adalah pribadi. Perhatian, garis bawah tidak mengubah kenyataan bahwa properti adalah properti publik, ia hanya mengatakan kepada para pengembang lain bahwa properti tersebut seharusnya dianggap pribadi.
Beberapa pengembang masih menyukai untuk menggunakan garis bawah untuk menunjukkan anggota pribadi, seperti: obj._color.
Scope statis
Atribut dan metode yang didefinisikan dalam scope statis dapat diakses kapan saja dari lokasi yang sama. Dalam Java, kelas dapat memiliki atribut dan metode, tanpa harus menginstansiasi objek kelas, dapat mengakses atribut dan metode ini, misalnya kelas java.net.URLEncoder, fungsi encode() adalah metode statis.
ECMAScript tidak memiliki scope statis
Dalam arti yang ketat, ECMAScript tidak memiliki scope statis. Namun, ia dapat memberikan atribut dan metode kepada fungsi konstruktur. Ingat, fungsi konstruktur hanya fungsi. Fungsi adalah objek, dan objek dapat memiliki atribut dan metode. Misalnya:
function sayHello() { alert("hello"); } sayHello.alternate = function() { alert("hi"); } sayHello(); //Output "hello" sayHello.alternate(); //Output "hi"
Di sini, metode alternate() sebenarnya adalah metode fungsi sayHello. Dapat dipanggil seperti fungsi biasa sayHello() untuk output "hello", atau dipanggil sayHello.alternate() untuk output "hi". Meskipun demikian, alternate() tetap adalah metode dalam lingkungan scope publik sayHello() bukan metode statis.
Kata kunci this
Fungsi this
Dalam ECMAScript, salah satu konsep yang paling penting untuk dipahami adalah penggunaan kata kunci this, yang digunakan dalam metode objek. Kata kunci this selalu mengarah ke objek yang menghubungkan metode, misalnya:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); //Output "red"
Dalam kode di atas, kata kunci this digunakan dalam metode showColor() objek. Dalam lingkungan ini, this sama dengan oCar. Kode di bawah ini memiliki fungsi yang sama seperti kode di atas:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(oCar.color); }; oCar.showColor(); //Output "red"
Alasan untuk guna this
Bapa kenapa guna this? Karena dalam proses instantiasi objek, selalu tak dapat dipastikan pengembang akan guna nama variabel apa. Dengan guna this, dapat digunakan ulang fungsi yang sama di berbagai tempat. Pikirkan contoh di bawah ini:
function showColor() { alert(this.color); }; var oCar1 = new Object; oCar1.color = "red"; oCar1.showColor = showColor; var oCar2 = new Object; oCar2.color = "blue"; oCar2.showColor = showColor; oCar1.showColor(); //Output "red" oCar2.showColor(); //Output "blue"
Dalam kod di atas, terlebih dahulu fungsi showColor() ditakrifkan menggunakan this, kemudian dibuat dua objek (oCar1 dan oCar2), satu objek yang properti color disediakan "red", dan objek lain yang properti color disediakan "blue". Kedua-dua objek diberikan properti showColor, merujuk kepada fungsi asal showColor () (perhatian, tiada masalah penamaan disini, kerana salah satunya adalah fungsi global, dan yang lain adalah properti objek). Panggilan setiap objek showColor(), output oCar1 adalah "red", dan output oCar2 adalah "blue". Ini disebabkan oleh penggunaan oCar1.showColor() apabila kata kunci this di dalam fungsi setaraf oCar1. Panggilan oCar2.showColor() apabila kata kunci this di dalam fungsi setaraf oCar2.
Perhatian, penggunaan properti objek harus menggunakan kata kunci this. Contohnya, jika menggunakan kod di bawah, methode showColor() tidak akan berjalan:
function showColor() { alert(color); };
Jika objek atau kata kunci this digunakan untuk merujuk kepada variable, ECMAScript akan melihatnya sebagai variable lokal atau global. kemudian fungsi akan mencari variable yang dinamakan color, tetapi tidak dapat ditemui. Apa yang berlaku? Fungsi akan menunjukkan "null" di dalam peringatan.
- Halaman sebelumnya Jenis objek
- Halaman berikutnya Definisi kelas atau objek