Saya lebih suka menggunakan OOP dalam proyek skala besar seperti yang saya kerjakan sekarang. Saya perlu membuat beberapa kelas dalam JavaScript tetapi, jika saya tidak salah, setidaknya ada beberapa cara untuk melakukannya. Apa yang akan menjadi sintaksis dan mengapa itu dilakukan dengan cara itu?
Saya ingin menghindari penggunaan perpustakaan pihak ketiga - setidaknya pada awalnya.
Mencari jawaban lain, saya menemukan artikel Pemrograman Berorientasi Objek dengan JavaScript, Bagian I: Warisan - Doc JavaScript yang membahas pemrograman berorientasi objek dalam JavaScript. Apakah ada cara yang lebih baik untuk melakukan warisan?
javascript
oop
class
Karim
sumber
sumber
Jawaban:
Inilah cara untuk melakukannya tanpa menggunakan perpustakaan eksternal:
Sekarang jawaban sebenarnya jauh lebih kompleks dari itu. Misalnya, tidak ada yang namanya kelas dalam JavaScript. JavaScript menggunakan
prototype
skema pewarisan berbasis.Selain itu, ada banyak perpustakaan JavaScript populer yang memiliki gaya mereka sendiri yang mendekati fungsionalitas seperti kelas dalam JavaScript. Anda ingin memeriksa setidaknya Prototipe dan jQuery .
Memutuskan yang mana di antara yang terbaik adalah yang terbaik untuk memulai perang suci di Stack Overflow. Jika Anda memulai proyek JavaScript-berat yang lebih besar, itu pasti layak belajar perpustakaan populer dan melakukannya dengan cara mereka. Saya seorang pria Prototipe, tetapi Stack Overflow tampaknya condong ke jQuery.
Sejauh hanya ada "satu cara untuk melakukannya", tanpa ada ketergantungan pada perpustakaan eksternal, cara saya menulis cukup banyak.
sumber
Cara terbaik untuk mendefinisikan kelas dalam JavaScript adalah dengan tidak mendefinisikan kelas.
Serius.
Ada beberapa rasa yang berbeda dari orientasi objek, beberapa di antaranya adalah:
Dan mungkin orang lain yang saya tidak tahu.
JavaScript mengimplementasikan OO berbasis prototipe. Dalam OO berbasis prototipe, objek baru dibuat dengan menyalin objek lain (bukannya dibuat dari templat kelas) dan metode hidup langsung di objek, bukan di kelas. Warisan dilakukan melalui pendelegasian: jika suatu objek tidak memiliki metode atau properti, objek tersebut dilihat pada prototipe-nya (yaitu objek yang dikloning), maka prototipe prototipe dan sebagainya.
Dengan kata lain: tidak ada kelas.
JavaScript sebenarnya memiliki tweak yang bagus untuk model itu: konstruktor. Anda tidak hanya dapat membuat objek dengan menyalin yang ada, Anda juga dapat membuat mereka "kehabisan udara", sehingga untuk berbicara. Jika Anda memanggil fungsi dengan
new
kata kunci, fungsi itu menjadi konstruktor danthis
kata kunci tidak akan mengarah ke objek saat ini melainkan ke objek "kosong" yang baru dibuat. Jadi, Anda dapat mengonfigurasi objek dengan cara apa pun yang Anda suka. Dengan cara itu, konstruktor JavaScript dapat mengambil salah satu peran kelas dalam OO berbasis kelas tradisional: berfungsi sebagai templat atau cetak biru untuk objek baru.Sekarang, JavaScript adalah bahasa yang sangat kuat, sehingga cukup mudah untuk menerapkan sistem OO berbasis kelas dalam JavaScript jika Anda mau. Namun, Anda hanya harus melakukan ini jika Anda benar-benar membutuhkannya dan bukan hanya karena itulah cara Jawa melakukannya.
sumber
Kelas ES2015
Dalam spesifikasi ES2015, Anda dapat menggunakan sintaks kelas yang hanya berupa gula di atas sistem prototipe.
Manfaat
Manfaat utama adalah alat analisis statis lebih mudah untuk menargetkan sintaks ini. Juga lebih mudah bagi orang lain yang berasal dari bahasa berbasis kelas untuk menggunakan bahasa sebagai polyglot.
Peringatan
Berhati-hatilah dengan keterbatasannya saat ini. Untuk mencapai properti pribadi, seseorang harus menggunakan Simbol atau WeakMaps . Dalam rilis mendatang, kelas kemungkinan besar akan diperluas untuk memasukkan fitur-fitur yang hilang ini.
Dukung
Dukungan browser saat ini tidak terlalu bagus (didukung oleh hampir semua orang kecuali IE), tetapi Anda dapat menggunakan fitur ini sekarang dengan transpiler seperti Babel .
Sumber daya
sumber
Saya lebih suka menggunakan Daniel X. Moore's
{SUPER: SYSTEM}
. Ini adalah disiplin yang memberikan manfaat seperti variabel instance benar, pewarisan berbasis sifat, hierarki kelas, dan opsi konfigurasi. Contoh di bawah ini mengilustrasikan penggunaan variabel instan yang benar, yang saya percaya adalah keuntungan terbesar. Jika Anda tidak memerlukan variabel instan dan senang dengan hanya variabel publik atau pribadi, maka mungkin ada sistem yang lebih sederhana.Wow, itu tidak terlalu berguna untuknya sendiri, tetapi lihatlah menambahkan subclass:
Keuntungan lain adalah kemampuan untuk memiliki modul dan warisan berbasis sifat.
Contoh memiliki kelas orang termasuk modul bindable.
Pengungkapan: Saya adalah Daniel X. Moore dan ini adalah milik saya
{SUPER: SYSTEM}
. Ini adalah cara terbaik untuk mendefinisikan kelas dalam JavaScript.sumber
sumber
Berikut ini adalah cara untuk membuat objek dalam javascript, yang telah saya gunakan sejauh ini
Contoh 1:
Contoh 2:
Contoh 3:
Contoh 4: Manfaat sebenarnya dari Object.create (). silakan lihat [tautan ini]
Contoh 5 (Object.create Crockford yang disesuaikan):
Untuk terus memperbarui jawaban dengan ES6 / ES2015
Kelas didefinisikan seperti ini:
sumber
Saya pikir Anda harus membaca Douglas Crockford's Prototypal Inheritance in JavaScript dan Classical Inheritance in JavaScript .
Contoh dari halamannya:
Efek? Ini akan memungkinkan Anda untuk menambahkan metode dengan cara yang lebih elegan:
Saya juga merekomendasikan videonya: Advanced JavaScript .
Anda dapat menemukan lebih banyak video di halamannya: http://javascript.crockford.com/ Dalam buku John Reisig Anda dapat menemukan banyak contoh dari situs web Douglas Crockfor.
sumber
'strings'
sebutan yang sebenarnya banyak nama, tetapi elegan bukan salah satunya ...Karena saya tidak akan mengakui rencana pabrik YUI / Crockford dan karena saya suka menjaga segala sesuatunya tetap dan dapat dikembangkan, inilah variasi saya:
di mana idealnya tes typeof dilakukan pada sesuatu seperti metode pertama yang dibuat prototipe
sumber
Jika Anda ingin yang sederhana, Anda dapat menghindari kata kunci "baru" seluruhnya dan cukup menggunakan metode pabrik. Saya lebih suka ini, kadang-kadang, karena saya suka menggunakan JSON untuk membuat objek.
Tapi saya tidak yakin apa yang terjadi pada kinerja untuk objek besar.
sumber
Itulah cara TypeScript mengkompilasi kelas dengan konstruktor ke JavaScript.
sumber
Cara sederhananya adalah:
Alasannya
that
adalah bahwa ituthis
dapat terikat pada sesuatu yang lain jika Anda memberikan metode sebagai pengendali event, sehingga Anda menyimpan nilai selama instantiasi dan menggunakannya nanti.Sunting: ini jelas bukan cara terbaik, hanya cara sederhana. Saya juga menunggu jawaban yang bagus!
sumber
Anda mungkin ingin membuat jenis dengan menggunakan Pola Lipat:
Kode itu akan memberi Anda jenis yang disebut myType . Ini akan memiliki bidang pribadi internal yang disebut toggle dan teks . Ini juga akan memiliki anggota yang terpapar ini: bidang menghitung dan angka ; toggle properti , teks dan numberLength ; metode incrementNumbersByCount dan tweak .
Pola Lipat sepenuhnya rinci di sini: Pola Lipat Javascript
sumber
Kode golf untuk jawaban @ liammclennan .
sumber
Mootools (Alat Berorientasi Objek Saya) berpusat pada gagasan kelas . Anda bahkan dapat memperluas dan menerapkan dengan warisan.
Ketika dikuasai, itu membuat javascript yang kuat dan dapat digunakan kembali.
sumber
Kelas Berbasis Objek dengan Warisan
Sederhana, manis, dan sudah selesai.
sumber
Basis
Kelas
Tindakan
sumber
Berdasarkan contoh dari Triptych, ini bahkan mungkin lebih sederhana:
Ini hanya membuat instance objek tunggal, tetapi masih berguna jika Anda ingin merangkum sekelompok nama untuk variabel dan metode dalam kelas. Biasanya tidak akan ada argumen "Bob, M" untuk konstruktor, misalnya jika metode akan panggilan ke sistem dengan data sendiri, seperti database atau jaringan.
Saya masih terlalu baru dengan JS untuk melihat mengapa ini tidak menggunakan
prototype
hal itu.sumber
JavaScript berorientasi objek , tetapi secara radikal berbeda dari bahasa OOP lainnya seperti Java, C # atau C ++. Jangan mencoba memahaminya seperti itu. Buang pengetahuan lama itu dan mulai lagi. JavaScript membutuhkan pemikiran yang berbeda.
Saya sarankan untuk mendapatkan manual yang bagus atau sesuatu tentang masalah itu.
Saya sendiri menemukan Tutorial ExtJS yang terbaik untuk saya, meskipun saya belum pernah menggunakan framework sebelum atau setelah membacanya. Tapi itu memang memberikan penjelasan yang baik tentang apa yang ada di dunia JavaScript.Maaf, sepertinya konten tersebut telah dihapus. Berikut adalah tautan ke salinan archive.org . Bekerja hari ini. : Psumber
sumber