Penjelasan dalam komentar sangat rinci, jadi saya tidak akan berbicara banyak omong kosong di sini, cukup masukkan kode:
<type script = "Text/JavaScript"> // ECMA-262 mendefinisikan objek sebagai: "Kumpulan atribut yang tidak tertib, yang atributnya dapat berisi nilai-nilai dasar, objek atau fungsi" // Cara termudah untuk memahami objek adalah dengan membuat instance objek dan menambahkan atribut dan metode untuk itu var orang = objek baru (); person.name = "xulei"; person.age = "23"; person.job = "Front-end Engineer"; person.sayname = function () {waspada (this.name); } // Anda juga dapat menulis var person = {name: "xulei", usia: 23, pekerjaan: "rekayasa front-end", sayname: function () {alert (this.name)}} // 1. Jenis Atribut: Atribut Data dan akses atributnya // 1. Atribut Data, ada 4 karakteristik yang menggambarkan perilakunya // [dapat dikonfigurasi]: menunjukkan apakah atribut dapat dihapus untuk mendefinisikan kembali atribut, apakah atribut dapat dimodifikasi, atau apakah atribut dapat dimodifikasi ke atribut aksesor, nilai default itu benar // [enumerable]: Menunjukkan apakah atribut dapat dikembalikan melalui, nilai default itu benar // [enumerable]: Menunjukkan apakah atribut dapat dikembalikan melalui, nilai default itu benar // [enumerable]: Menunjukkan apakah atribut dapat dikembalikan melalui, nilainya yang tidak dapat dikembalikan, yang dapat ditulis [TULISAN [TURUTIONAL. Nilai default benar // [nilai]: Berisi nilai data atribut ini. The default value is undefined var person = { name: "xulei" } //A person object is created here, and the value value is "xulei" //To modify the default properties of the property, ECMAScript5's Object.defineProperty (the object where the property is located, the name of the property, the descriptor object) //The descriptor object must be configurable, enumerable, writable, value var peron = {} Object.defineproperty (peron, "name", {writable: false, // properti tidak dapat dimodifikasi nilai: "xu lei-xulei"}); alert (peron.name); // xu lei-xulei peron.name = "xu lei"; alert (peron.name); // xu lei-xulei // Operasi di atas akan diabaikan dalam mode non-ketat. Jika pengecualian dilemparkan dalam mode ketat // Setelah atribut didefinisikan sebagai tidak dapat dikonfigurasi, itu tidak dapat diubah menjadi dapat dikonfigurasi. // Dalam kebanyakan kasus, tidak perlu memanfaatkan fitur -fitur canggih yang disediakan oleh Object.defineproperty () metode. Tetapi sangat berguna untuk memahami JavaScript. // Pembaca disarankan untuk tidak menggunakan metode ini pada IE8. // 2. Mengakses propertinya memiliki 4 karakteristik // [dapat dikonfigurasi]: menunjukkan apakah atribut dapat dihapus untuk mendefinisikan kembali atribut, apakah karakteristik atribut dapat dimodifikasi, atau apakah atribut dapat dimodifikasi ke atribut aksesor, nilai default adalah yang benar // [enumerable]: Menunjukkan apakah atribut dapat dikembalikan melalui nilainya, yang default itu benar // [enumerable]: menunjukkan apakah atribut dapat dikembalikan melalui, nilai default adalah hal yang benar // [enumerable]: Menunjukkan apakah atribut dapat dikembalikan melalui, nilainya yang default, itu adalah [enumerable]: Menunjukkan apakah atribut dapat dikembalikan melalui nilainya, yang default itu benar // [enumerable]: Menunjukkan apakah atribut dapat dikembalikan melalui, nilainya yang ditentukan // // [Set]: Nilai default fungsi yang disebut saat menulis atribut var book = {_year: 2004, edisi: 1} object.defineproperty (buku, "tahun", {get: function () {return this._year;}, set: function (value) {if (value> 2004) {{ini. }); book.ear = 2005; Peringatan (Book.Edition); // 2 // Buat objek // 1. Perlakukan konstruktor sebagai orang fungsi (nama, usia, pekerjaan) {this.name = name; this.age = usia; this.job = pekerjaan; this.sayname = function () {alert (this.name); }} // gunakan var person = orang baru ("xulei", 23, "perangkat lunak"); orang.sayname (); // gunakan orang ("xulei2", 23, "job2"); // tambahkan ke window.sayname (); // panggil var di ruang lingkup objek lain o = objek baru (); Person.call (o, "xulei3", 23, "job3"); o.sayname (); </script>Ayo memiliki paragraf lain:
<type skrip = "Text/JavaScript"> // 1. Memahami objek prototipe // 2. Prototipe dan di operator // 3. Sintaks prototipe yang lebih sederhana // 4. Dinamisitas prototipe // 5. Prototipe Objek Asli // 6. Masalah dengan objek prototipe // 1. Setiap kali fungsi dibuat, atribut prototipe akan dibuat untuk fungsi berdasarkan seperangkat aturan tertentu. Atribut ini menunjuk ke objek prototipe dari fungsi // secara default, semua objek prototipe akan secara otomatis mendapatkan atribut konstruktor (konstruktor), yang berisi pointer ke fungsi di mana atribut prototipe berada // seperti function person () {} //person.protype.constructor poin poin ke orang // Setelah membuat konstruksi kustom. Sedangkan untuk metode lain, mereka diwarisi dari objek.// Ketika panggilan untuk membuat instance baru, instance berisi pointer (properti internal) untuk menunjuk ke objek prototipe dari konstruktor.//in firefox, safari, dan chrome, properti_proto_access var p1 = orang baru (); Peringatan (Person.Prototype.isPrototypeOf (P1)) Peringatan (Object.getPrototypeof (P1) == Person.prototype) // Meskipun nilai yang disimpan dalam prototipe dapat diakses melalui instance objek, nilai dalam prototipe tidak dapat ditulis ulang melalui instance objek. Jika kami menambahkan properti // ke instance dan nama properti sama dengan instance dalam prototipe, maka kami membuat properti dalam instance, dan properti akan memblokir properti dalam prototipe. misalnya: function person () {} person.prototype.name = "Amber"; Person.prototype.age = 23; Orang.prototype.job = "Insinyur Perangkat Lunak"; Person.prototype.sayname = function () {waspada (this.name)} var person1 = orang baru (); var person2 = orang baru (); person1.name = "Amber.xu"; alert (person1.name); // amber.xu -dari instance waspada (person2.name); // amber --from prototipe delete person1.name; alert (person1.name); // amber -dari prototipe // Gunakan metode hasownproperty () untuk mendeteksi apakah ada properti dalam instance atau dalam prototipe. Metode ini (diwarisi dari objek) // mengembalikan fungsi orang yang sebenarnya () {} person.prototype.name = "Amber"; Person.prototype.age = 23; Orang.prototype.job = "Insinyur Perangkat Lunak"; Person.prototype.sayname = function () {waspada (this.name)} var person1 = orang baru (); var person2 = orang baru (); alert (person1.hasownproperty ("name")); // false dari peringatan instance (person2.hasownproperty ("name")); // false dari instance person1.name = "amber.xu"; waspada (person1.name); alert (person1.hasownproperty ("name")); // true dari instance hapus person1.name; waspada (person1.name); alert (person1.hasownproperty ("name")); // false dari prototipe // 2. Prototipe dan di operator // Di ada dua cara untuk menggunakannya, satu digunakan secara terpisah dan di untuk-in. Saat digunakan sendiri, operator kembali mengembalikan true ketika objek dapat mengakses properti yang diberikan // tidak peduli apakah properti berasal dari prototipe atau fungsi instance person () {} person.prototype.name = "Amber"; Person.prototype.age = 23; Orang.prototype.job = "Insinyur Perangkat Lunak"; Person.prototype.sayname = function () {waspada (this.name)} var person1 = orang baru (); var person2 = orang baru (); alert ("name" in person1); // true from prototipe alert ("name" in person2); // true from prototipe alert ("tinggi" di person1); // false // dengan cara ini Anda dapat merangkum fungsi (apakah name yang diberikan) (name) (name) (name) (name) (name) (name) (name) (name) (name) (name) (name) (name) (name) {name) {name! } alert("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Returns all Properti yang dapat dihindarkan yang dapat diakses melalui objek, termasuk prototipe dan properti instan. o = {tostring: function () {return "My Object"}}; Menerima objek sebagai argumen, // array string yang berisi semua fungsi properti yang dapat dihindarkan () {} person.prototype.name = "Amber"; Person.prototype.age = 23; Orang.prototype.job = "Insinyur Perangkat Lunak"; Person.prototype.sayname = function () {waspada (this.name)} var person1 = orang baru (); var person2 = orang baru (); var keys = object.keys (person.prototype); peringatan (kunci) person1.name = "amber.xu"; person1.age = 23; var keys = object.keys (person1); Peringatan (kunci) peringatan("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- NAMA: Amber ", usia 23," perangkat lunak ", Sayname: function () {waspada (this.name)}} // Setelah menulis ini, atribut konstruktor tidak lagi menunjuk pada fungsi personel, tetapi pada teman yang benar -benar tidak dapat dikembalikan. instanceof objek) // true alert (friend.constructor == orang); // false alert (friend.constructor == objek); // true // Jika konstruktor sangat penting bagi Anda, Anda dapat mengaturnya ke nilai yang sesuai seperti orang di bawah ini () {{} orang ini. } var teman = orang baru (); Peringatan ("Setel secara manual constructor----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // dalam hal ini, Anda dapat menggunakan Object.defineproperty (orang. Antara instance dan prototipe, koneksi antara instance dan prototipe hanyalah pointer, bukan salinan // Ketika kita memanggil metode Sayhi (), pertama -tama kita akan mencari metode bernama Sayhi dalam instance, dan mencari prototipe jika tidak ditemukan. // Namun, jika Anda menulis ulang seluruh objek prototipe, maka situasinya akan berbeda. // Kita tahu bahwa ketika memanggil konstruktor, pointer prototipe ke prototipe asli akan ditambahkan ke instance, dan memodifikasi prototipe ke objek lain setara dengan memotong koneksi antara konstruktor dan prototipe asli. // Ingat: Pointer dalam instance hanya menunjuk ke prototipe, bukan ke konstruktor. misalnya: fungsi a () {} var a1 = new a (); A.prototype = {constructor: a, nama: "Amber", usia: 23, pekerjaan: "perangkat lunak", sayname: function () {waspada (this.name)}} alert("ERROR------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Even all native Jenis referensi dibuat menggunakan pola ini. Semua tipe referensi asli // metode misalnya yang didefinisikan pada prototipe konstruktornya: peringatan (typeof array.prototype.sort); // Peringatan (typeof string.prototype.substring); // Fungsi // tidak hanya dapat Anda mendapatkan referensi ke prototipe dari objek asli, tetapi Anda juga dapat mendefinisikan metode yang baru // String.prototype.startswith = function (text) {return this.indexof (text) == 0; }; var msg = "halo"; alert (msg.startswith ("h")); // Kami tidak merekomendasikan melakukan ini. Peringatan ("Masalah Prototipe Dengan Objek Prototipe"); // 6. Prototipe Contoh Fungsi Ques () {} ques.prototype = {constructor: ques, name: "Amber", usia: 23, pekerjaan: "it", friends: ["zhang san", "li si"], // tipe referensi kata: function () {this.name)}}; var q1 = ques baru (); var q2 = ques baru (); Q1.Friends.push ("Wang Wu"); alert (q1.friends); // alert (q2.friends); // waspada (q1.friends === Q2. friends); // Saya percaya semua orang telah melihat masalahnya. Ketika saya membuat dua contoh Q1 dan Q2, dan ketika saya menambahkan "Wang Wu" ke "teman" dari Q1, "teman" Q2 juga memiliki tiga "Wang San, Li Si, dan Wang Wu // itu karena array ada pada ques.prototype, bukan pada q1.Artikel ini akan berakhir di sini. Kami akan terus membahas pemrograman JavaScript yang berorientasi objek di masa depan. Saya harap semua orang bisa menyukainya.