Deskripsi Mode Prototipe
Catatan: Gunakan instance prototipe untuk menyalin dan membuat objek yang dapat disesuaikan baru; Untuk objek yang baru dibuat, Anda tidak perlu mengetahui proses spesifik membuat objek asli;
Prosedur: prototipe => protoexam baru => klon ke objek baru;
Gunakan kode yang relevan:
Salinan kode adalah sebagai berikut:
fungsi prototipe () {
this.name = '';
this.age = '';
this.sex = '';
}
Prototipe.prototype.userInfo = function () {
kembalikan 'informasi pribadi, nama:'+this.name+', usia:'+this.age+', jenis kelamin:'+this.sex+'<br />';
}
Sekarang dua atau lebih konten informasi pribadi diperlukan:
Salinan kode adalah sebagai berikut:
var proto = prototipe baru ();
var person1 = object.create (proto);
person1.name = 'xiao ming';
person1.sex = 'laki -laki';
person1.age = 35;
person1.userinfo ();
//
var person2 = object.create (proto);
person2.name = 'xiaohua';
orang2.sex = 'betina';
orang2.age = 33;
person2.userinfo ();
Output pengembalian:
Salinan kode adalah sebagai berikut:
Informasi Pribadi, Nama: Xiao Ming, Umur: 35, Jenis Kelamin: Pria
Informasi Pribadi, Nama: Xiaohua, Umur: 33, Jenis Kelamin: Wanita
Mode prototipe umumnya digunakan untuk struktur abstrak yang kompleks, tetapi komposisi konten serupa, konten abstrak dapat disesuaikan, dan kreasi baru hanya membutuhkan sedikit dimodifikasi pada objek pembuatan asli untuk memenuhi persyaratan;
Objek. Buat instruksi
1>. Definisi: Buat objek yang menentukan objek prototipe dan dapat berisi properti khusus opsional;
2> objek.create (proto [, properti]); Opsional, digunakan untuk mengonfigurasi properti objek baru;
Salinan kode adalah sebagai berikut:
1. Proto: Untuk membuat prototipe objek baru, itu harus nol; Proto ini sangat berharga hanya jika telah dibuat [baru] atau objek.prototype;
2. Properti: Opsional, Struktur:
{
Propfield: {
value: 'val' | {} | function () {},
Tulisan: Benar | false,
Hancur: Benar | Salah,
dapat dikonfigurasi: Benar | false,
get: function () {return 10},
set: function (value) {}
}
}
Atribut khusus memiliki empat atribut berikut:
Nilai: Nilai Atribut Kustom;
Tulisan: Apakah nilai item ini dapat diedit, default adalah false, dan ketika benar, obj.prodfield dapat ditetapkan; jika tidak, hanya baca;
penghancuran: enumerable;
dapat dikonfigurasi: dapat dikonfigurasi;
Ini juga dapat mencakup set, mendapatkan metode aksesor;
Di antara mereka, [set, get] tidak dapat muncul bersamaan dengan nilai dan writable;
1. Buat kelas objek prototipe:
Salinan kode adalah sebagai berikut:
fungsi protoclass () {
this.a = 'protoclass';
this.c = {};
this.b = function () {
}
}
Membuat metode prototipe:
Salinan kode adalah sebagai berikut:
Protoclass.prototype.amethod = function () {
//this.a;
//this.b ();
kembalikan ini.a;
}
Cara menggunakan
1. Buat objek dengan protoclass.prototype;
Salinan kode adalah sebagai berikut:
var obj1 = objek.create (protoclass.prototype, {
foo: {value: 'obj1', writable: true}
})
OBJ1 memiliki metode prototipe protoklass;
Salinan kode adalah sebagai berikut:
obj1.amethod ();
// Metode yang tidak ditentukan akan menjadi output agar dapat diakses, dan anggota protoklass tidak dapat diakses
Namun, metode ini tidak dapat menjalankan properti anggota A, B, C di bawah Protoclass:
2. Gunakan protoklass instantiated sebagai prototipe:
Salinan kode adalah sebagai berikut:
var proto = protoclass baru ();
var obj2 = object.create (proto, {
foo: {value: 'obj2'}
});
OBJ2 dibuat dengan cara ini memiliki semua atribut anggota A, B, C dan metode prototipe Amethod protoclass; dan menambahkan atribut data hanya-baca;
Salinan kode adalah sebagai berikut:
obj2.a; // protoclass
obj2.c: // [objek]
obj2.b (); //
obj2.amethod (); // protoclass
obj2.foo; // obj2
3. Subkelas Warisan:
Salinan kode adalah sebagai berikut:
fungsi subclass () {
}
Subclass.prototype = object.create (protoclass.prototype, {
foo: {value: 'subclass'}
});
Subclass.prototype.submethod = function () {
kembalikan this.a || this.foo;
}
Metode ini dapat diwarisi dari metode Amethod Protoclass dan dieksekusi;
Salinan kode adalah sebagai berikut:
var func = subclass baru ();
func.amethod (); // tidak ditentukan, sifat anggota protoklas tidak dapat dibaca, a, b, c
func.submethod (); // subclass
Untuk mengaktifkan subkelas untuk membaca properti anggota protoklass, subkelas perlu diubah:
Salinan kode adalah sebagai berikut:
fungsi subclass ()
{
Protoclass.call (ini);
}
// kode lain;
Metode ini dapat memperoleh properti anggota dan metode prototipe protoclass;:
Salinan kode adalah sebagai berikut:
var func = subclass baru ();
func.amethod (); // protoclass
func.submethod (); // protoclass
Metode lain adalah menggunakan objek protoklass instantiated sebagai prototipe subkelas;
Salinan kode adalah sebagai berikut:
var proto = protoclass baru ();
fungsi subclass () {
}
Subclass.prototype = object.create (proto, {
foo: {value: 'subclass'}
});
Dengan cara ini, setelah subclass dipakai, Anda dapat memperoleh semua properti protoklass dan metode prototipe, dan membuat atribut data read-only foo;
Salinan kode adalah sebagai berikut:
var func = subclass baru ();
func.foo; // subkelas
func.A; // protoclass
func.B (); //
func.C; //[Obyek]
func.amethod (); // protoclass
4. Metode lain untuk menciptakan warisan sama dengan objek. Protoklass instantiated Create untuk prototipe:
Salinan kode adalah sebagai berikut:
fungsi subclass () {
this.foo = 'subclass'; // Tapi itu bisa dibaca dan ditulis di sini
}
Subclass.prototype = protoclass baru ();
Object.Buat instruksi terkait
Object.create digunakan untuk membuat objek baru. Ketika objek, prototipe adalah nol, dan efeknya konsisten dengan objek baru (); atau {};
Saat fungsi, fungsi sama dengan FunctionName baru;
Salinan kode adalah sebagai berikut:
// 1 objek
var o = {}
// setara dengan
var o2 = object.create ({});
// Konstruktornya sama;
// -----------------------------------------
fungsi func () {
this.a = 'func';
}
func.prototype.method = function () {
kembalikan ini.a;
}
var newfunc = func baru ();
// setara dengan [efeknya sama]
var newfunc2 = object.create (object.prototype/*function.prototype || function () {}*/, {
A: {value: 'func', writable: true},
Metode: {value: function () {return this.a;}}
});
Tetapi NewFunc dan NewFunc2 berbeda dalam referensi fungsi untuk membuat objek mereka.
newfunc adalah fungsi func () {...}, newfunc2 adalah fungsi fungsi {asli}
Salinan kode adalah sebagai berikut:
Object.create (proto [, propertiesfield]):
Proto menunjukkan bahwa nilainya diperlukan dan bisa nol. Jika tidak diatur, pengecualian akan dilemparkan;
Proto adalah non-null, yaitu nilai instantiated, yaitu nilai yang baru; Sebagian besar objek dalam JavaScript memiliki atribut konstruktor, atribut mana yang menunjukkan fungsi mana objek dipakai melalui;
Propertiesfield adalah opsional, mengatur properti anggota atau metode yang mungkin diperlukan untuk objek yang baru dibuat;