Batasan Objek EkmaScript
- Halaman sebelumnya Tipe objek
- Halaman berikutnya Definisi kelas atau objek
Lingkungan adalah rentang penyesuaian variabel.
Lingkungan publik, pribadi, dan dilindungi
Konsep
Dalam desain program berorientasi objek tradisional, perhatian utama adalah lingkungan publik dan pribadi. Atribut objek di lingkungan publik dapat diakses dari luar objek, yaitu setelah pengembang membuat instansi objek, mereka dapat menggunakan atribut publiknya. Sementara itu, atribut di lingkungan pribadi hanya dapat diakses di dalam objek, yaitu untuk dunia luar, atribut ini tidak ada. Ini berarti jika kelas mendefinisikan atribut dan metode pribadi, turunannya tidak dapat mengakses atribut dan metode ini.
Lingkungan yang dilindungi juga digunakan untuk mendefinisikan atribut dan metode pribadi, tetapi atribut dan metode ini masih dapat diakses oleh turunan kelas.
ECMAScript hanya memiliki lingkungan publik
Diskusi tentang lingkungan di atas di ECMAScript hampir tak berguna, karena di ECMAScript hanya ada satu lingkungan - lingkungan publik. Semua atribut dan metode objek di ECMAScript adalah publik. Oleh karena itu, saat mendefinisikan kelas dan objek sendiri, perhatian khusus harus diberikan. Ingat, semua atribut dan metode secara default adalah publik!
Penyelesaian Sugeruh
Banyak pengembang yang menyarankan pola efektif untuk lingkungan atribut, yang mengatasi masalah seperti ini di ECMAScript.
Karena kekurangan lingkungan pribadi, para pengembang menetapkan konvensi yang menjelaskan mana atribut dan metode yang seharusnya dianggap pribadi. Konvensi ini menentukan untuk menambahkan garis bawah di depan dan belakang atribut:
obj._color_ = "blue";
Pada kode ini, atribut color adalah pribadi. Perhatian, garis bawah tidak mengubah fakta bahwa atribut adalah atribut publik, ia hanya mengatakan kepada para pengembang lain bahwa atribut ini seharusnya dianggap pribadi.
Beberapa pengembang masih menyukai penggunaan garis bawah untuk menunjukkan anggota pribadi, seperti: obj._color。
Lingkungan statis
Atribut dan metode yang didefinisikan dalam lingkungan statis dapat diakses kapan saja dari lokasi yang sama. Dalam Java, kelas dapat memiliki atribut dan metode, tanpa perlu menginstansiasi objek kelas, dapat mengakses atribut dan metode ini, misalnya kelas java.net.URLEncoder, fungsi encode() adalah metode statis.
ECMAScript tidak memiliki lingkungan statis
Dalam hal yang ketat, ECMAScript tidak memiliki lingkungan statis. Namun, ia dapat memberikan atribut dan metode kepada konstraktor. Ingat, konstraktor hanya fungsi. Fungsi adalah objek, dan objek dapat memiliki atribut dan metode. Misalnya:
function sayHello() { alert("hello"); } sayHello.alternate = function() { alert("hi"); } sayHello(); //keluarkan "hello" sayHello.alternate(); //keluarkan "hi"
Di sini, metode alternate() sebenarnya adalah metode fungsi sayHello. Dapat dipanggil seperti fungsi biasa sayHello() untuk keluarkan "hello", atau dipanggil sayHello.alternate() untuk keluarkan "hi". Meskipun demikian, alternate() tetap adalah metode dalam lingkungan umum fungsi sayHello(), bukan metode statis.
Kata kunci this
Fungsi this
Salah satu konsep yang paling penting untuk dipahami dalam ECMAScript adalah penggunaan kata kunci this, yang digunakan di dalam metode objek. Kata kunci this selalu mengarah ke objek yang memanggil metode, misalnya:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); //keluarkan "red"
Dalam kode di atas, kata kunci this digunakan di 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(); //keluarkan "red"
Alasan menggunakan this
Mengapa menggunakan this? Karena saat instansiasi objek, selalu tak dapat dipastikan penulis kode akan menggunakan nama variabel apa. Dengan menggunakan this, dapat digunakan ulang fungsi yang sama di berbagai tempat. Berpikirkan 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"
Pada kode di atas, fungsi showColor() didefinisikan dengan this pertama, kemudian dibuat dua objek (oCar1 dan oCar2), properti color objek pertama diatur menjadi "red", properti color objek kedua diatur menjadi "blue". Kedua objek diisi dengan properti showColor, mengarah ke fungsi showColor asli (perhatikan bahwa di sini tidak ada masalah penamaan, karena salah satunya adalah fungsi global, dan yang lain adalah properti objek). Pemanggilan showColor() masing-masing objek, output oCar1 adalah "red", dan output oCar2 adalah "blue". Ini disebabkan karena saat pemanggilan oCar1.showColor(), kata kunci this di dalam fungsi sama dengan oCar1. Saat pemanggilan oCar2.showColor(), kata kunci this di dalam fungsi sama dengan oCar2.
Perhatian, untuk merujuk properti objek, harus digunakan kata kunci this. Misalnya, jika menggunakan kode di bawah ini, metode showColor() tidak dapat berjalan:
function showColor() { alert(color); };
Jika variabel tidak dihubungkan dengan objek atau kata kunci this, ECMAScript akan menganggapnya seperti variabel lokal atau global. kemudian fungsi akan mencari variabel lokal atau global bernama color, tetapi tidak dapat ditemukan. Apa yang terjadi? Fungsi akan menampilkan "null" di peringatan.
- Halaman sebelumnya Tipe objek
- Halaman berikutnya Definisi kelas atau objek