Dalam JavaScript, objek didefinisikan sebagai "kumpulan atribut yang tidak tertib yang propertinya dapat berisi nilai -nilai dasar, objek, atau fungsi." Dalam istilah awam, kita dapat memahami objek sebagai set pasangan nilai nama, di mana nilai dapat berupa data atau fungsi.
Biasanya ada dua cara untuk membuat objek khusus. Yang pertama adalah membuat instance suatu objek dan kemudian menambahkan properti dan metode ke dalamnya, seperti:
var orang = objek baru (); person.name = "Scott"; person.age = 24; person.sayname = function () {alert (person.name); }Metode kedua adalah metode literal objek. Secara umum disarankan untuk menggunakan metode ini untuk membuat objek, misalnya:
var person = {name: "scott", usia: 24, sayname: function () {alert (this.name); }}Jenis atribut
Ada dua properti berbeda yang didefinisikan dalam JavaScript: Properti Data dan Properti Accessor. Atribut data umumnya digunakan untuk menyimpan nilai data, sementara atribut Accessor umumnya melakukan operasi GET/Set dan tidak dapat secara langsung menyimpan nilai data. Dalam ES5, kami mendefinisikan atribut untuk menggambarkan berbagai fitur properti. Dalam JavaScript, kami tidak dapat secara langsung mengakses fitur, jadi kami memasukkannya ke dalam dua pasang tanda kurung persegi, seperti [[enumerable]].
• Properti data
Atribut data terutama menggambarkan perilaku mereka:
1. [[Dapat dikonfigurasi]]: Default benar. Menunjukkan apakah atribut dapat dihapus untuk mendefinisikan kembali atribut, apakah karakteristik atribut dapat dimodifikasi, atau apakah atribut dapat dimodifikasi ke atribut Accessor;
2. [[enumerable]]: default benar. Menunjukkan apakah atribut dapat dikembalikan melalui loop untuk;
3. [[writable]]: Default benar. Menunjukkan apakah nilai atribut dapat dimodifikasi.
4. [[Nilai]]: Nilai default tidak ditentukan. Mewakili nilai data yang berisi atribut. Nilai atribut membaca dan menulis dilakukan dari posisi ini.
Untuk properti yang didefinisikan di atas langsung pada objek orang, [[[dapat dikonfigurasi]], [[enumerable]]], dan [[writable]] properti diatur ke true secara default, sedangkan properti [[nilai]] diatur ke nilai tertentu. Jika Anda ingin memodifikasi properti default dari suatu properti, Anda dapat menggunakan metode Object.defineproperty () yang disediakan oleh ES5. Metode ini menerima tiga parameter: objek tempat properti berada, nama properti, dan objek deskriptor. Objek deskriptor hanya dapat berisi satu atau lebih dari empat karakteristik di atas. Contohnya adalah sebagai berikut:
var person = {name: "scott"} object.defineproperty (person, "name", {writable: false;}) console.log (person.name); // "scott" person.name = "evan"; console.log (person.name); // "Scott"Atur properti yang dapat ditulis dari atribut nama objek orang ke false. Nilai atribut ini tidak dimodifikasi, sehingga operasi salinan atribut ini akan diabaikan secara langsung.
var person = {name: "scott"} object.defineproperty (orang, "name", {dapat dikonfigurasi: false;}) console.log (person.name); // "Scott" Delete Person.name; console.log (person.name); // "Scott"Dapat dilihat bahwa ketika nilai properti dapat dikonfigurasi dari atribut nama diatur ke false, itu berarti bahwa atribut tidak dapat dihapus dari objek. Tetapi harus dicatat bahwa ketika suatu properti didefinisikan sebagai tidak dapat dikonfigurasi, itu tidak dapat diubah kembali menjadi dapat dikonfigurasi. Pada saat ini, memodifikasi fitur lain selain writable akan menyebabkan kesalahan, misalnya:
var person = {name: "scott"} object.defineproperty (orang, "name", {dapat dikonfigurasi: false;}) objek.defineproperty (orang, "name", {dapat dikonfigurasi: true; // kesalahan akan dilemparkan ke sini}))Dengan kata lain, setelah memodifikasi fitur yang dapat dikonfigurasi menjadi false, akan ada batasan saat memodifikasi fitur lainnya.
• Properti Accessor
Atribut Accessor tidak berisi nilai data. Ini berisi sepasang fungsi pengambil dan setter. Ketika atribut Accessor dibaca, fungsi Getter dipanggil dan nilai yang valid dikembalikan; Ketika atribut Accessor ditulis, fungsi setter dipanggil dan nilai baru dilewatkan, dan fungsi setter bertanggung jawab untuk memproses data. Properti ini memiliki empat karakteristik:
1. [[Dapat dikonfigurasi]]: Default benar. Menunjukkan apakah atribut dapat dihapus untuk mendefinisikan kembali atribut, apakah karakteristik atribut dapat dimodifikasi, atau apakah atribut dapat dimodifikasi ke atribut Accessor;
2. [[enumerable]]: default benar. Menunjukkan apakah atribut dapat dikembalikan melalui loop untuk;
3. [[get]]: Fungsi dipanggil saat membaca atribut, default tidak terdefinisi;
4. [[Set]]: Fungsi dipanggil saat menulis atribut, default tidak terdefinisi.
Properti aksesor tidak dapat didefinisikan secara langsung, mereka harus didefinisikan melalui fungsi objek.defineproperty (), misalnya:
var person = {_name: "scott", _age: 24, _tel: 86247}; // Atribut nama adalah objek read-only.defineproperty (orang, "name", {get: function () {return this._name;}}); // Atribut usia adalah objek write-only.defineproperty (orang, "usia", {set: function (p) {this._age = p;}}); // Atribut TEL adalah objek read-only.defineproperty (orang, "tel", {get: function () {return this._tel;}, set: function (p) {this._tel = p;}}); console.log (person.name); // "scott" person.name = "evan"; console.log (person.name); // "Scott", modifikasi atribut nama tidak valid.console.log (person.age); // tidak terdefinisi, atribut orang yang tidak dapat dibaca.age = 25; console.log (person._age); // 25, console.log (person.tel); // "86247", atribut orang yang dapat dibaca.tel = "13975"; console.log (person.tel); // "13975", modifikasi dapat dibuatUnderscore sebelum atribut menunjukkan atribut yang hanya dapat diakses melalui metode objek. Ketika kami menggunakan orang. Nama, kami benar -benar menyebut fungsi pengambil dari atribut nama, dan ketika kami memberikan nilai kepada orang.name, kami menyebut fungsi setter atribut nama, sehingga hubungan antara atribut dan aksesor sangat jelas.
Tentukan beberapa atribut
Faktanya, ES5 memberi kita metode untuk mendefinisikan beberapa properti untuk suatu objek, yaitu objek.defineproPerties (). Fungsi ini menerima dua parameter, objek tempat properti berada, dan objek yang terdiri dari atribut yang perlu dimodifikasi dan objek deskriptornya. Misalnya, ubah contoh di atas untuk mendefinisikan beberapa properti sekaligus, sebagai berikut:
var person = {_name: "scott", _age: 24, _tel: 86247}; Object.DefineProPerties (orang, {name: {get: function () {return this._name;}}, usia: {set: function (p) {this._age = p;}}, tel: {get: function () {return this._tel;}, set: function (p) {get.Baca properti
ES5 menyediakan metode Object.getOwnPropertyDesCripter () untuk mendapatkan deskriptor untuk properti yang diberikan. Metode ini menerima dua parameter: objek tempat atribut berada dan nama atribut dari deskriptornya untuk dibaca. Hasilnya akan mengembalikan objek. Jika ini adalah atribut Accessor, objek yang dikembalikan menyertakan yang dapat dikonfigurasi, enumerable, dapatkan dan diatur; Jika itu adalah atribut data, properti dari objek yang dikembalikan mencakup nilai yang dapat dikonfigurasi, dapat ditulis, dan nilainya. Sebagai contoh di atas, gunakan yang berikut:
var person = {_name: "scott", _age: 24, _tel: 86247}; Object.DefineProPerties (orang, {name: {get: function () {return this._name;}}, usia: {set: function (p) {this._age = p;}}, tel: {get: function () {return this._tel;}, set: function (p) {get. var gambaran = objek.getOwnPropertyDescripter (orang, "tel"); console.log (descripter.value); // console.log yang tidak ditentukan (descripter.enumerable); // false console.log (typeOf descriptioner.get); //"fungsi"Kode di atas memperoleh properti TEL dari objek orang tersebut. Karena ini adalah properti Accessor, nilainya tidak ditentukan, dihitung adalah salah, dan dapatkan pointer ke fungsi Getter.
Artikel di atas secara singkat membahas atribut data JavaScript dan atribut aksesor adalah semua konten yang telah saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.