1. Cadangan Pengetahuan:
1. Fungsi yang menyebutkan nama atribut:
(1) Untuk ... dalam: Anda dapat melintasi semua sifat yang dapat dihindarkan dalam objek (termasuk properti sendiri dan sifat bawaan) di badan loop.
(2) Object.keys (): Mengembalikan array (atribut yang dapat dihindarkan)
(3) Object.getOwnPropertynames (): Semua properti sendiri
3. Properti Atribut: Atribut Data dan Atribut Accessor
(1) Atribut Data: Nilai yang dapat dikonfigurasi dapat dikonfigurasi
Atribut data hanya memiliki satu nilai sederhana;
(2) Atribut Aksesori: Tulis (set), baca (get), enumerable, dapat dikonfigurasi
Aksesori tidak dapat ditulis (mis. Tidak ada fitur yang dapat ditulis).
Jika atribut memiliki metode yang ditetapkan, maka atribut ini dapat ditulis dan ada metode GET, maka atribut ini dapat dibaca.
4. Metode untuk mendefinisikan properti atribut: objek.defineproperty (objek, atribut, objek deskriptor)
5. Dapatkan objek deskriptor dari properti: objek.getOwnPropertyDescriptor (objek, properti)
2. Contoh
1. Menurut penggunaan untuk ... dalam, kita dapat menulis metode untuk mensimulasikan "warisan":
<script type = "text/javascript"> var child = {}; var mother = {name: "zhangzhiying", lastage: 21, sex: "female"}; fungsi perluasan (target, sumber) {untuk (var p dalam sumber) {target [p] = sumber [p]; } return target; } memperluas (anak, ibu); Console.log (anak); // <strong> objek {name: "zhangzHiying", lastage: 21, sex: "female"} </strong> </script>2. Gunakan untuk masuk untuk melingkarkan sifat -sifat objek prototipe, dan kemudian menetapkan nilai ke objek kosong kita satu per satu, sehingga mewujudkan "warisan". Gagasan ini sangat benar. Mari kita modifikasi contoh di atas:
<script type = "text/javascript"> var child = {}; var mother = {name: "zhangzHiying", lastage: 21, <strong> set usia (nilai) {this.lastage = value; }, dapatkan usia () {return this.lastage+1; }, </strong> sex: "female"}; <br> <strong> mother.age = 15; </strong> // Ada metode yang ditetapkan, yang memiliki fungsi yang dapat ditulis (target, sumber) {untuk (var p in source) {target [p] = sumber [p]; } return target; } memperluas (anak, ibu); Console.log (anak); // <strong> objek {name: "zhangzHiying", lastage: 15, usia: 16, seks: "betina"} </strong> </script>Anda dapat melihat bahwa sepasang set digunakan dalam kode, dapatkan; di mana usia adalah atribut aksesor.
Hasil Run: Objek normal yang tidak mengandung set, dapatkan.
Kesimpulan: "Warisan" yang diimplementasikan oleh For tidak menangani set dan dapatkan, itu mengubah atribut aksesor (usia) menjadi atribut data statis.
3. Atur atribut data untuk objek ibu
<script type = "text/javascript"> var child = {}; var mother = {name: "zhangzHiying", lastage: 21, set usia (nilai) {this.lastage = value; }, dapatkan usia () {return this.lastage+1; }, seks: "wanita"}; Object.defineproperty (ibu, "lastage", {writable: false}); // atur lastage menjadi tidak dapat ditulis ibu.AGE = 15; // Atur tidak valid, karena nilai lastage tetap tidak berubah, lastage+1 tetap tidak berubah, yaitu, usia tetap tidak berubah fungsi diperluas (target, sumber) {untuk (var p dalam sumber) {target [p] = sumber [p]; } return target; } memperluas (anak, ibu); Console.log (anak); // objek {name: "zhangzhiying", lastage: 21, usia: 22, seks: "betina"} anak -anak.lastage = 12; // Hasilnya menunjukkan bahwa perubahan lastage, menunjukkan bahwa anak. Lastage tidak "mewarisi" fitur ibu. Mari kita gunakan metode GetOwnPropertyDesRiptor () untuk mengkonfirmasi <br> console.log (objek.geto<Em id = __ mcedel> </script> </em>
Kesimpulan: Untuk mencapai warisan, kita masih perlu menyelesaikan masalah atribut masalah -> "warisan".
4. Versi Lengkap
<script type = "text/javascript"> var child = {}; var mother = {name: "zhangzHiying", lastage: 21, set usia (nilai) {this.lastage = value; }, dapatkan usia () {return this.lastage+1; }, seks: "wanita"}; Object.defineproperty (ibu, "lastage", {writable: false}); ibu.age = 15; <Span style = "Color: #3333399"> <strong> function extand (target, sumber) {var names = object.getOwnPropertynames (sumber); // Dapatkan semua nama properti untuk (var i = 0; i <name.length; i ++) {if (nama [i] di target) lanjutkan; // Jika properti ini ada, lewati (dalam prototipe warisan, jika atribut properti sendiri dan properti objek prototipe duplikat, mempertahankan properti sendiri) var desc = object.getOwnPropertyDescriptor (sumber, nama [i]); // Dapatkan objek deskriptor dari atribut ibu (yaitu, himpunan karakteristik atribut, diwakili oleh objek deskriptor dalam objek ES5). Defineproperty (target, nama [i], desc); // Dapatkan objek deskriptor ibu ke definisi atribut anak} target pengembalian; } </strong> </span> Perpanjangan (anak, ibu); Console.log (anak); Child.Lastage = 12; console.log (objek.getOwnPropertyDescriptor (anak, "lastage")); Console.log (anak); </script>Hasil akhir:
Anda dapat dengan jelas melihat pencetakan tiga kali, anak "diwariskan" untuk mengatur dan mendapatkan, nilai terakhir tidak berubah, dan writable juga salah.
Ringkasan: Saya membaca "Panduan otoritatif untuk JavaScript" baru -baru ini. Saya akan meringkas beberapa pengalaman. Jika ada kesalahan, harap perbaiki saya dan pelajari dan buat kemajuan bersama ~
Penjelasan terperinci di atas tentang warisan JavaScript menggunakan fungsi adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.