Dalam pertanyaan baru - baru ini , saya menerima saran untuk dibicarakan, antara lain, aspek JavaScript di mana fungsi adalah objek 'kelas satu'. Apa arti 'kelas pertama' dalam konteks ini, yang bertentangan dengan objek lain?
EDIT (Jörg W Mittag): Duplikat yang Tepat: "Apa itu konstruksi pemrograman kelas satu?"
javascript
ProfK
sumber
sumber
Jawaban:
Mengutip Wikipedia :
Halaman ini juga menggambarkannya dengan indah:
juga membaca komentar TrayMan, menarik ...
sumber
Gagasan "fungsi kelas satu" dalam bahasa pemrograman diperkenalkan oleh ilmuwan komputer Inggris Christopher Strachey pada 1960-an. Formulasi paling terkenal dari prinsip ini mungkin dalam Struktur dan Interpretasi Program Komputer oleh Gerald Jay Sussman dan Harry Abelson:
Pada dasarnya, ini berarti bahwa Anda dapat melakukan semua fungsi yang dapat Anda lakukan dengan semua elemen lain dalam bahasa pemrograman. Jadi, dalam kasus JavaScript, ini berarti bahwa semua yang dapat Anda lakukan dengan Integer, String, Array, atau objek lain apa pun, Anda juga dapat melakukannya dengan fungsi.
sumber
Persetujuan yang lebih lengkap dari formulasi Strachey-Sussman-Abelson. Jadi jika bahasa Anda mendukung konstruksi seperti itu maka Anda memiliki fungsi sebagai bahasa kelas satu :)
Singkatnya, apa pun adalah objek kelas satu jika bertindak dalam bahasa sebagai jenis manipulasi objek atau tipe objek. Hanya sesuatu yang dapat Anda operasikan dan sampaikan pernyataan serta evaluasi dalam ekspresi pada saat yang bersamaan. Atau bahkan lebih pendek: ketika Anda dapat menganggap suatu fungsi sebagai objek yang dapat dipanggil secara tambahan.
sumber
Fungsi JavaScript adalah fungsi kelas satu yang berarti fungsi dan objek diperlakukan sebagai hal yang sama. Fungsi dapat disimpan sebagai variabel di dalam objek atau array serta dapat dilewatkan sebagai argumen atau dikembalikan oleh fungsi lain. Itu membuat fungsi "warga negara kelas satu dalam JavaScript"
JavaScript menggunakan sintaksasi notasi literal yang membuatnya sulit untuk sepenuhnya memahami fakta bahwa dalam fungsi JavaScript adalah objek.
Sebagai contoh..
kedua deklerasinya setara. Dengan menggunakan
new
kita memanggil fungsi konstruktor suatu Objek. Juga dengan menggunakan{}
(pintasan JavaScript yang disebut literal) kami memanggil fungsi konstruksi suatu Objek.{}
hanyalah representasi yang lebih pendek untuk membuat instance konstruktor.Sebagian besar bahasa menggunakan
new
kata kunci untuk membuat objek, jadi mari kita buat objek JavaScript.Seperti yang Anda lihat, kami membuat fungsi nama objek .
Membuat fungsi nama objek yang sama menggunakan ekspresi fungsi JavaScript ..
Di sini kita pergi, kita baru saja membuat fungsi nama objek.
sumber
Dalam fungsi javascript adalah objek kelas satu karena dapat melakukan lebih banyak dari apa yang dapat dilakukan objek.
Function instanceof Object //returns true
Seperti objek, fungsi dapat memiliki properti dan dapat memiliki tautan kembali ke fungsi konstruktornya.
sumber
Tes sederhana. Jika Anda dapat melakukan ini dalam bahasa Anda (Python sebagai contoh):
Bahasa Anda memperlakukan fungsi sebagai objek kelas satu.
sumber
Ini berarti bahwa fungsi adalah objek, dengan tipe dan perilaku. Mereka dapat dibangun secara dinamis, diedarkan sebagai objek lain, dan fakta bahwa mereka dapat dipanggil adalah bagian dari antarmuka mereka.
sumber
Ini berarti bahwa fungsi sebenarnya diturunkan dari Object. Sehingga Anda bisa menyebarkannya dan bekerja dengannya seperti dengan objek lain.
Namun dalam c # Anda perlu menahan diri untuk tidak mendelegasikan atau merefleksikan fungsi. (ini menjadi jauh lebih baik baru-baru ini dengan ekspresi lambda)
sumber
Definisi di situs Mozilla ringkas dan jelas. Menurut mereka,
Dan
sumber
Saya kira ketika sesuatu adalah kelas pertama dalam suatu bahasa, itu berarti bahwa itu didukung oleh sintaks daripada perpustakaan atau gula sintaksis. misalnya, kelas dalam C bukan kelas satu
sumber
Sederhana dalam JavaScript, fungsi adalah objek kelas satu, fungsi adalah objek tipe dan mereka dapat digunakan dengan cara kelas satu seperti objek lain (String, Array, Number, dll.) Karena mereka sebenarnya adalah objek diri. Mereka dapat “disimpan dalam variabel, diteruskan sebagai argumen ke fungsi, dibuat di dalam fungsi, dan dikembalikan dari fungsi
sumber