Ada sekitar seratus masalah terminologi di sini, sebagian besar dibangun di sekitar seseorang (bukan Anda) mencoba untuk membuat ide mereka terdengar seperti The Best.
Semua bahasa berorientasi objek harus mampu menangani beberapa konsep:
- enkapsulasi data bersama dengan operasi terkait pada data, yang dikenal sebagai anggota data dan fungsi anggota, atau sebagai data dan metode, antara lain.
- warisan, kemampuan untuk mengatakan bahwa objek-objek ini hanya seperti itu set objek KECUALI untuk perubahan ini
- polymorphism ("banyak bentuk") di mana objek memutuskan sendiri metode apa yang harus dijalankan, sehingga Anda dapat bergantung pada bahasa untuk merutekan permintaan Anda dengan benar.
Sekarang, sejauh perbandingan:
Hal pertama adalah seluruh pertanyaan "kelas" vs "prototipe". Ide awalnya dimulai di Simula, di mana dengan metode berbasis kelas setiap kelas mewakili satu set objek yang berbagi ruang keadaan yang sama (baca "nilai yang mungkin") dan operasi yang sama, sehingga membentuk kelas ekivalensi. Jika Anda melihat kembali Smalltalk, karena Anda dapat membuka kelas dan menambahkan metode, ini sama dengan apa yang dapat Anda lakukan di Javascript.
Kemudian bahasa OO ingin dapat menggunakan pemeriksaan tipe statis, jadi kami mendapat gagasan tentang kelas tetap yang ditetapkan pada waktu kompilasi. Dalam versi kelas terbuka, Anda memiliki lebih banyak fleksibilitas; di versi yang lebih baru, Anda memiliki kemampuan untuk memeriksa beberapa jenis kebenaran di kompiler yang seharusnya memerlukan pengujian.
Dalam bahasa "berbasis kelas", penyalinan itu terjadi pada waktu kompilasi. Dalam bahasa prototipe, operasi disimpan dalam struktur data prototipe, yang disalin dan dimodifikasi pada saat dijalankan. Namun secara abstrak, sebuah kelas masih merupakan kelas ekivalensi dari semua objek yang memiliki ruang dan metode yang sama. Saat Anda menambahkan metode ke prototipe, Anda secara efektif membuat elemen kelas kesetaraan baru.
Sekarang, mengapa melakukan itu? terutama karena itu membuat mekanisme yang sederhana, logis, elegan pada saat run time. sekarang, untuk membuat objek baru, atau untuk membuat kelas baru, Anda hanya perlu melakukan salinan yang dalam, menyalin semua data dan struktur data prototipe. Anda mendapatkan lebih banyak warisan dan polimorfisme secara gratis: pencarian metode selalu terdiri dari meminta kamus untuk penerapan metode dengan nama.
Alasan yang berakhir pada skrip Javascript / ECMA pada dasarnya adalah bahwa ketika kami memulai ini 10 tahun yang lalu, kami berhadapan dengan komputer yang kurang kuat dan browser yang kurang canggih. Memilih metode berbasis prototipe berarti penerjemah bisa sangat sederhana sambil mempertahankan sifat yang diinginkan dari orientasi objek.