Advertisement
  1. Code
  2. Web Development

Dasar Pemrograman JavaScript Berorientasi-Objek

by
Read Time:14 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Thoriq Firdaus (you can also view the original English article)

Beberapa tahun terakhir, JavaScript semakin meraih popularitas, antara lain disebabkan dengan banyaknya pustaka (library) yang dikembangkan agar penerapan serta penggunaan JavaScript menjadi lebih mudah terutama bagi mereka yang mungkin belum sepenuhnya memahami bahasa inti dari JavaScript.

Sementara, dulu umumnya JavaScript hanya dianggap sebagai bahasa serampangan, yang tidak memiliki prinsip dasar yang kuat; hal ini bukan lagi menjadi persoalan lantaran dengan munculnya banyak aplikasi web JavaScript berskala tinggi dan beberapa 'adaptasi' seperti JSON (JavaScript Object Notation).

JavaScript dapat memiliki semua hal yang ditawarkan oleh bahasa-bahasa pemrograman berorientasi objek, meskipun dengan beberapa upaya ekstra diluar cakupan artikel ini.

Mari Membuat Sebuah Objek

Selamat, anda telah membuat sebuah objek. Ada dua cara untuk membuat sebuah objek JavaScript yaitu dengan fungsi 'constructor' dan notasi 'literal'. Yang telah kita buat di atas adalah sebuah fungsi constructor dan berikut adalah cara mendefinisikan sebuah Object dalam JavaScript dengan menggunakan notasi literal.

Literal adalah cara yang lebih dianjurkan untuk name spacing sehingga kode JavaScript anda tidak menghalangi script lain (atau juga sebaliknya) yang sedang berjalan di dalam satu halaman tersebut, juga jika anda menggunakan objek hanya sebagai satu objek dan tidak membutuhkan lebih dari satu permisalan. Sedangkan penggunaan fungsi constructor lebih dianjurkan jika anda harus menjalankan beberapa fungsi awal sebelum objek tersebut dibuat atau membutuhkan banyak permisalan dari objek tersebut, di mana setiap permisalan dapat diubah selama rentang waktu script tersebut. Untuk lebih jelasnya, mari kita lanjutkan dengan membuat dua tipe objek secara bersamaan sehingga kita dapat melihat perbedaannya.

Mendefinisikan Method dan Property

Versi Constructor:

Versi Literal:

Di dalam setiap objek di atas, baik dalam versi constructor atau literal, kita telah membuat sebuah property bernama 'iAM' yang mengandung nilai string yang kemudian kita gunakan di dalam sebuah method bernama 'whatAmI' yang akan menampilkan sebuah alert/pesan.

Property adalah variabel yang dibuat di dalam sebuah objek, dan sedangkan method ialah fungsi yang dibuat di dalam sebuah objek.

Sekarang kita akan melihat bagaimana menggunakan property dan method tersebut (sebenarnya anda telah melakukannya jika anda telah akrab dengan penggunaan sebuah pustaka).

Untuk menggunakan sebuah property, pertama anda menuliskan objek dimana ia ditempatkan ‐ jadi dalam contoh ini adalah myObject ‐ kemudian tambahkan sebuah titik yang diikuti oleh nama property internal, sehingga ia akan nampak seperti ini: myObject.iAm (contoh ini akan menghasilkan 'an object').

Penggunaan method pada prinsipnya sama, hanya berbeda pada eksekusi. Seperti umumnya sebuah fungsi JavaScript, anda harus meletakkan tanda kurung setelahnya; jika tidak anda hanya akan menghasilkan sebuah referensi fungsi dan bukannya menghasilkan keluaran dari fungsi tersebut. Jadi, ia akan tampak seperti ini: myObject.whatAmI() (contoh ini akan menampilkan pesan yang berisikan 'I am an object')

Perbedaannya:

  • Di dalam Objek constructor, penggunaan property dan method dimulai dengan menggunakan kata kunci 'this', sedangkan versi literal tidak.
  • Nilai di dalam Objek constructor ditentukan setelah tanda sama-dengan '=', sedangkan di dalam versi literal, nilai didefinisikan setelah tanda titik-dua ':'.
  • Fungsi constructor dapat memiliki (pilihan) titik-koma pada akhir masing-masing property/method, sedangkan di dalam versi literal jika anda memiliki lebih dari satu property atau method, mereka harus dipisahkan dengan koma ',', dan TIDAK dapat memiliki tanda titik-koma setelahnya ';', jika tidak JavaScript akan menghasilkan error.

Ada juga sebuah perbedaan antara cara kedua tipe objek ini digunakan.

Untuk menggunakan objek literal, and cukup mereferensikannya dengan nama variable, sehingga anda menuliskannya seperti berikut;

Dengan fungsi constructor anda harus membuat permisalan baru dari objek tersebut; sehingga penulisannya adalah sebagai berikut;

Menggunakan Fungsi Constructor

Mari kita gunakan dan mengembangkan fungsi constructor kita sebelumnya, sehingga fungsi tersebut melakukan beberapa operasi dasar (namun juga dinamis) ketika kita menjalankannya.

Seperti umumnya fungsi JavaScript, kita dapat melewatkan argumen ke dalam fungsi constructor kita;

Sekarang, mari kita membuat permisalan baru dengan memanggil method 'whatAmI', dan kemudian mengisikan nilai ke dalam kolom argumen fungsi tersebut.

Contoh ini akan menghasilkan pesan 'I am an object of the JavaScript language.'

Membuat Permisalan atau Tidak

Saya menyebutkan di awal tentang perbedaan antara objek constructor dan objek literal. Ketika sebuah perubahan terjadi pada objek literal, maka ia akan berdampak pada keseluruhan objek di dalam script, sedangkan ketika sebuah fungsi constructor telah dibuat ke dalam permisalan baru, dan kemudan terjadi perubahan pada permisalan tersebut, ia tidak akan berdampak pada permisalan-permisalan yang lain dari objek tersebtu. Mari kita ambil sebuah contoh;

Pertama kita akan membuat sebuah objek literal;

Bahkan jika anda membuat sebuah permisalan baru dan menujukannya terhadap objek tersebut, ia akan menghasilkan efek yang sama.

Sekarang mari kita coba contoh yang sama dengan sebuah fungsi constructor.

Seperti yang diharapkan, keduanya menghasilkan nilai yang benar, namun mari kita ubah myProperty untuk salah satu dari kedua permisalan di atas.

Seperti yang dapat anda lihat pada contoh di atas, walaupun kita telah mengubah property dari contructorOne ia tidak mempengaruhi myObjectContructor dan oleh karena itu juga tidak mempengaruhi constructorTwo. Bahkan jika constructorTwo dimisalkan sebelum kita mengubah property myProperty dari constructorOne, ia tetap tidak akan mempengaruhi property myProperty dari constructorTwo karena ia merupakan permisalan yang sama sekali berbeda dari objek yang terdapat di dalam memori JavaScript.

Jadi manakah yang seharusnya anda gunakan? Jawabnya tergantung dari situasi. Jika anda hanya ingin satu objek dari jenisnya untuk script anda (seperti yang akan anda lihat pada contoh di akhir artikel ini), maka gunakan objek literal. Namun jika anda membutuhkan beberapa permisalan dari satu objek tersebut, di mana masing-masing permisalan terlepas dari yang lain dan dapat memiliki property atau method berbeda, tergantung dari cara ia dikonstruksikan, maka gunakan fungsi constructor.

This dan That

Kata kunci 'this' yang banyak kita gunakan di dalam constructor berkaitan dengan scope atau cakupan. Cakupan di dalam JavaScript adalah fungsi/objek berdasar, yaitu ketika anda berada di luar sebuah fungsi, anda tidak dapat menggunakan sebuah variabel yang tidak terdefinisi di dalam fungsi tersebut (kecuali jika anda memakai closure).

Namun ada sebuah rantai cakupan, yaitu bahwa sebuah fungsi di dalam fungsi yang lain dapat mengakses sebuah variabel yang ada di dalam fungsi induk. Mari kita lihat beberapa contoh berikut.

Seperti yang anda lihat pada contoh ini, var1 didefinisikan di dalam objek global dan tersedia untuk semua fungsi dan objek. var2 didefinisikan di dalam function1 dan tersedia untuk function1 dan function2, namun jika anda mencoba untuk mereferensikannya dari objek global ia akan menghasilkan error 'var2 is undefined', karena var3 hanya dapat diakses di function2.

Jadi apa yang direferensikan oleh 'this' di sini? Di dalam sebuah browser, 'this' mereferensikan objek window, jadi secara teknis window adalah objek global kita. Jika kita berada di dalam sebuah objek, 'this' akan menuju ke pada objek itu sendiri, akan tetapi jika anda berada di dalam sebuah fungsi, 'this' tetap akan menunjuk ke pada window objek dan begitu pula jika anda di dalam sebuah method yang berada di dalam sebuah objek, maka 'this' akan merujuk pada objek tersebut.

Karean cakupan rantai, jika anda berada di dalam sebuah sub-objek (sebuah objek di dalam sebuah objek), 'this' akan merujuk ke pada sub-objek dan bukan objek induk.

Sebagai catatan tambahan ketika menggunakan fungsi seperti setInterval, setTimeout dan eval, ketika Anda menjalankan fungsi atau metode melalui salah satu dari mereka, 'this' mengacu pada objek window karena fungsi-fungsi tersebut adalah objek window, sehingga setInterval() dan window.setInterval() adalah sama.

Baik! sekarang mari kita menerapkannya ke dalam sebuah contoh nyata dengan membuat sebuah objek validasi form.

Contoh Penggunaan: Membuat Objek Validasi Formulir

Pertama saya harus memperkenalkan anda kepada fungsi addEvent yang akan kita buat, serta adalah kombinasi dari fungsi addEventListener() ECMAScript (Firefox, Safari, etc..) dan fungsi attachEvent() Microsoft ActiveX Script.

Di atas kita membuat sebuah fungsi baru dengan tiga argumen, to adalah objek DOM yang akan kita ikatkan dengan event, type adalah jenis event, dan fn adalah fungsi yang akan dijalankan ketika event tersebut dicetuskan. Pertama, ia akan memeriksa apakah addEventListener didukung, jika didukung ia akan menggunakannya, jika tidak ia akan memeriksa attachEvent dan jika semua uji tersebut gagal anda mungkin menggunakan IE5 atau browser yang sudah usang sehingga kita akan menambahkan event langsung ke property event (catatan: opsi ke-tiga akan menimpa fungsi apapun yang ada yang mungkin telah tersemat ke property event, sedangkan dua opsi pertama akan menambahkannya sebagai fungsi tambahan dari event property).

Sekarang mari kita atur dokumen kita sehingga serupa dengan apa yang mungkin anda lihat ketika anda mengembangkan dengan menggunakan jQuery.

Di jQuery anda akan mendapati;

Dengan menggunakan fungsi addEvent kita, kita akan mendapati;

Sekarang untuk objek Form kita.

Kode ini cukup sederhana dan mendasar, namun dapat dengan mudah dikembangkan lagi.

Rinciannya adalah: pertama kita membuat sebuah property baru dengan sebuah nilai string, 'valid', ialah nama kelas CSS kita yang ketika diaplikasikan ke dalam kolom formulir akan menampilkan efek validitas seperti garis hijau. Kita juga mendefinisikan dua sub-objek, fname dan lname, sehingga kita dapat mendefinisikan property tersebut di mana saja, property tersebut adalah minLength yaitu panjang maksimum karakter yang dapat ditampung oleh sebuah kolom formulir dan fieldName yang sebenarnya tidak kita gunakan pada artikel ini, tapi bisa berguna seperti untuk menampilkan pesan error (contoh: 'First Name field is required').

Selanjutnya kita membuat sebuah method bernama validateLength yang menerima dua argumen: formEL yaitu elemen DOM untuk validasi dan type yang mengacu kepada satu dari dua sub-objek (yaitu fname atau lname). Fungsi ini memeriksa apakah panjang kolom di antara rentang minLength dan maxLength, jika tidak maka kemudia kita akan menghapis kelas 'valid' (jika ada) dari elemen dan menghasilkan false, sebaliknya jika 'iya' make kita akan menambahkan kelas 'valid' dan menghasilkan true.

Selanjutnya kita memiliki sebuah method bernama validateEmail yang menerima elemen DOM sebagai argumen, kita kemudian menguji nilai elemen DOM ini dengan regular expression untuk email; jika hasil uji valid maka kita akan menambahkan kelas 'valid' and menghasilkan true dan begitupula sebaliknya.

Di akhir, kita memliki sebuah method beranama getSubmit. Method ini diberikan id dari formulir dan kemudian melakukan loop melalui semua elemen input di dalam formulir yang telah ditentukan untuk menemukan input yang memiliki jenis 'submit' (type="submit"). Alasan kita melakukan ini adalah agar tombol submit dapat kita non-aktifkan hingga semua input di dalam formulir tersbut siap untuk di-submit.

Mari letakkan objek validator agar bekerja di dalam sebuah formulir sungguhan. Pertama kita butuh HTML kita.

Sekarang mari kita akses objek input menggunakan JavaScript dan memvalidasi mereka ketika formulir di-submit.

Mari kita rinci kode ini.

Kita membungkus kode di dalam fungsi addEvent, sehingga ketika window termuat, kode tersebut akan jalan. Pertama, kita mengambil formulir kita dengan menggunakan ID dan meletakkannya ke dalam sebuah variabel bernama ourForm, kemudian kita mengambil tombol submit kita (dengan menggunakan method getSubmit dari objek Form kita) dan meletakkanya ke dalam sebuah variabel bernama submit_button, dan kemudian mengatur atribut disabled tombol submit menjadi 'disabled'.

Selanjutnya kita mendefinisikan sebuah fungsi bernama checkForm. Fungsi ini menyimpan semua input ke dalam kolom formulir sebagai array dan kita menyertakannya ke dalam variabel inputs. Kemudian ia mendefinisikan beberapa pernyataan 'if' yang akan menguji masing-masing kolom di dalam input array terhadap method Form kita. Ini adalah alasan kita menghasilkan true atau false di dalam method kita, sehingga jika ia menghasilkan true, kita melewatkan pernyataan 'if' tersebut dan melanjutkan ke baris selanjutnya, namun jika ia menghasilkan false, kita keluar dari pernyataan 'if'.

Setelah definisi fungsi, kita menjalankan fungsi checkForm ketika halaman pertama kali termuat dan juga menyertakan fungsi untuk keyup event dan submit event.

Mungkin anda bertanya, mengapa kita menyertakan ke submit jika kita menonaktifkan tombol submit. Jika fokus anda saat ini berada di sebuah kolom input dan menekan tombol enter, ia akan berusaha untuk me-submit form tersebut dan kita harus menguji untuk alasan ini, inilah alasan fungsi checkForm kita menghasilkan true (men-submit formulir) atau false (tidak mensubmit formulir).

Simpulan

Kita telah belajar bagaimana mendefinisikan jenis-jenis objek yang berbeda dengan JavaScript dan membuat property dan method di dalamnya. Kita juga telah belajar mengenai fungsi addEvent dan menggunakan objek kita dengan contoh nyata mendasar.

Ini mengakhiri bahasan kita tentang JavaScript Berorientasi Objek. Saya harap, ini dapat menjadi awal anda untuk membuat pustaks anda sendiri. Jika anda menyukai artikel ini dan tertarik dengan topik JavaScript terkait, masukkan di komentar, saya akan dengan senang hati menulisnya. Terima kasih telah membaca.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.