Kemarin lusa, seorang netizen meninggalkan pesan yang menanyakan padaku, apa itu Object? Karena saya sibuk merekonstruksi kontrol TreeView selama dua hari terakhir, saya sangat menyesal tidak merespons tepat waktu. Luangkan waktu hari ini untuk melihat apa sebenarnya Object di JavaScript? Apa hubungan antara Objek dan Fungsi? Saya menyambut koreksi jika saya salah.
Meskipun ini adalah pesan pribadi, saya harap Anda tidak menyalahkan saya jika Anda mengirimkannya secara anonim.
Apa sebenarnya Objek js?
Awalnya saya mengira Object adalah prototipe dari semua objek di js.
Tapi: alert(Object.constructor) menampilkan fungsi Fungsi...
Artinya prototipe Object adalah Function?
Namun masalahnya muncul lagi:
Function.prototype.read=function(){};//Prototipe Fungsi Diperluas
for(var i in Object)alert(i)//menampilkan pembacaan, yang selanjutnya menegaskan bahwa prototipe Object adalah Function
Object.prototype.read=function(){};//memperluas prototipe Object
for(var i in Function)alert(i)//Tampilan dibaca, prototipe Fungsi adalah Objek? ? ? ?
Apa sebenarnya Objek itu? Apakah Objek dan Fungsi sebagai kelas adalah hal yang sama?
Teman ini bingung Konstruktor, Prototipe, dan Fungsi karena JavaScript adalah bahasa berbasis Objek (JavaScript tidak berisi kelas yang sesuai). Sebenarnya bisa dikatakan bahwa Object adalah prototipe dari semua objek, tapi ini mengacu pada konsep prototipe dalam Pola Prototipe dalam pola desain, bukan fitur bahasa prototipe JavaScript yang disebut Object.prototype.
Jadi apa sebenarnya Object di JavaScript? Script56.chm (tutorial resmi M$) mengatakan: Menyediakan fungsi umum untuk semua objek JScript. Nah, apakah kamu mengerti? Karena seharusnya aku mengerti, tapi sepertinya aku masih belum mengerti @_@. Jika kita melihat struktur datanya, sebuah objek (sebuah instance dari Object) adalah kumpulan yang tidak berurutan, strukturnya mirip dengan map di C++, hashtable di C#, dan hashmap di Java. Dan itu berisi nilai primitif yang diberikan oleh sistem bahasa JavaScript. Objek memiliki metode yang disebut valueOf, fungsinya untuk mengembalikan nilai asli dari objek yang ditentukan. Ini juga dapat ditemukan di Script56, dan ada juga tabel yang mencantumkan hasil pengembalian valueOf dari objek sistem. Dengan kata lain, objek-objek seperti Array, Boolean, Tanggal, Fungsi, Angka, dan lain-lain sebenarnya semuanya berasal dari Object, dan nenek moyangnya semuanya adalah Object. Mereka mewakili fitur bahasa yang berbeda. Misalnya, Array memiliki atribut panjang yang dikelola secara otomatis, Boolean hanya memiliki nilai benar atau salah, Tanggal mewakili struktur waktu, dan Fungsi dapat dijalankan. Ini semua adalah kemampuan yang diberikan kepadanya oleh tipe aslinya (valueOf ). Objek sebenarnya hanyalah sebuah konsep. Bahasa JavaScript didasarkan pada objek, yang berarti bahwa semua tipe bawaan disarikan dari sekumpulan metode dan properti umum (juga disebut perilaku dan status). karakteristik ini adalah Objek. Faktanya, Object tidak terlalu berguna dalam pemrograman. Kita semua menggunakan objek instance dari Object, dan kemudian menggunakan fitur koleksi Object (expando) untuk memperluas objek tersebut menjadi apa yang kita inginkan. Untuk Object.prototype sebenarnya tidak terlalu berguna, karena setiap tipe tertentu memiliki prototipenya sendiri, dan sebagian besar metode prototipe yang kami tambahkan adalah untuk tipe tertentu.
Selain prototipe, Objek juga memiliki atribut yang sangat penting - konstruktor. Hal ini digunakan untuk menyelesaikan perluasan objek yang saya sebutkan sebelumnya. Ini juga menjadi dasar bagi kita untuk menggunakan JavaScript untuk mensimulasikan OOP. Karena segala sesuatu di JavaScript adalah Objek, maka konstruktornya juga, tetapi tipe aslinya adalah Fungsi (jalankan Object.constructor.valueOf() untuk mendapatkan: function Function() { [kode asli] }). Tentu saja, sebaliknya, tidak semua objek JavaScript memiliki atribut konstruktor, dan beberapa objek bawaan tidak memiliki konstruktor.
Mengenai hubungan antara Objek dan Fungsi, menurut saya ini bukan kode pengujian yang baik: Function.prototype.read=function(){};//Prototipe Extended Function
for(var i in Object)alert(i)//menampilkan pembacaan, yang selanjutnya menegaskan bahwa prototipe Object adalah Function
Object.prototype.read=function(){};//memperluas prototipe Object
for(var i in Function)alert(i)//Tampilan dibaca, prototipe Fungsi adalah Objek?
Keempat baris kode ini digunakan untuk menjelaskan prinsip prototipe JavaScript dan mensimulasikan metode pewarisan prototipe pemrograman OO. Mereka cukup seksi! Namun, mereka tidak dapat menjelaskan dengan jelas hubungan antara Objek dan Fungsi: (Sebaliknya, mereka akan menipu
kita
jelaskan secara singkat masing-masing fungsi dalam JavaScript.
Objek Asli: Objek yang disediakan oleh bahasa JavaScript yang tidak bergantung pada host eksekusi. Beberapa di antaranya adalah objek bawaan, seperti Global dan Matematika; beberapa dibuat dan digunakan dalam lingkungan skrip yang berjalan, seperti: Array, Boolean , Tanggal, Fungsi, Nomor, Objek, RegExp, Kesalahan.
Objek Bawaan: Objek bawaan yang disediakan oleh bahasa JavaScript yang tidak bergantung pada host eksekusi, seperti Objek bawaan Global dan Matematika semuanya adalah Objek Asli.
Objek Host: Objek apa pun yang disediakan oleh bahasa JavaScript yang bergantung pada lingkungan host. Semua objek Objek non-Asli adalah objek host, seperti: window di IE, instance wscript di WScript, kelas apa pun yang dibuat pengguna