Rumah >hujung hadapan web >tutorial js >Perbincangan ringkas tentang merealisasikan kelas berorientasikan objek dalam pengetahuan JavaScript_Basic

Perbincangan ringkas tentang merealisasikan kelas berorientasikan objek dalam pengetahuan JavaScript_Basic

WBOY
WBOYasal
2016-05-16 16:27:591390semak imbas

Objek ialah apa sahaja yang orang mahu kaji Daripada integer yang paling mudah kepada kapal terbang yang kompleks, ia boleh dianggap sebagai objek bukan sahaja, tetapi juga peraturan abstrak, rancangan atau peristiwa. --Dipetik daripada Ensiklopedia Baidu

Pengaturcaraan berorientasikan objek kini merupakan model pengaturcaraan yang paling popular. Tetapi apa yang mengecewakan ialah JavaScript, aplikasi front-end yang paling banyak digunakan, tidak menyokong pengaturcaraan berorientasikan objek.

JavaScript tidak mempunyai aksara kawalan akses, ia tidak mempunyai kelas kata kunci untuk mentakrifkan kelas, ia tidak menyokong lanjutan atau bertindih untuk warisan, dan ia tidak menggunakan maya untuk menyokong fungsi maya Walau bagaimanapun, Javascript adalah fleksibel bahasa Mari kita ikuti Mari kita lihat bagaimana Javascript tanpa kelas kata kunci melaksanakan definisi kelas dan mencipta objek.

Tentukan kelas dan cipta objek contoh kelas

Dalam Javascript, kami menggunakan fungsi untuk menentukan kelas, seperti berikut:

Salin kod Kod adalah seperti berikut:

fungsi Bentuk()
{
var x=1;
var y=2;
}

Anda mungkin berkata, ragu-ragu? Bukankah ini fungsi penentu? Ya, ini ialah fungsi takrifan Kami mentakrifkan fungsi Bentuk dan memulakan x dan y. Walau bagaimanapun, jika anda melihatnya dari sudut lain, ini adalah untuk mentakrifkan kelas Shape, yang mempunyai dua atribut x dan y, dan nilai awal masing-masing adalah 1 dan 2 Walau bagaimanapun, kata kunci yang kami gunakan untuk mentakrifkan kelas adalah fungsi bukannya kelas.

Kemudian, kita boleh mencipta objek aShape kelas Shape, seperti berikut:

Salin kod Kod adalah seperti berikut:

var aShape = new Shape();

Tentukan harta awam dan persendirian

Kami telah mencipta objek aShape, tetapi apabila kami cuba mengakses sifatnya, ralat berlaku, seperti berikut:

Salin kod Kod adalah seperti berikut:
aShape.x=1;

Ini menunjukkan bahawa sifat yang ditakrifkan dengan var adalah peribadi. Kita perlu menggunakan kata kunci ini untuk mentakrifkan harta awam.

fungsi Bentuk()
{
Ini.x=1;
This.y=2;
}


Dengan cara ini, kita boleh mengakses atribut Shape, seperti:

aShape.x=2;


Baiklah, kita boleh meringkaskan berdasarkan kod di atas: gunakan var untuk mentakrifkan atribut peribadi kelas dan gunakan ini untuk mentakrifkan atribut awam kelas.

Tentukan kaedah awam dan peribadi

Dalam Javascript, fungsi adalah contoh kelas Fungsi secara tidak langsung mewarisi daripada Object Oleh itu, kita boleh menggunakan kaedah tugasan untuk mencipta fungsi menetapkan fungsi kepada kelas Pembolehubah atribut, maka pembolehubah atribut ini boleh dipanggil kaedah kerana ia adalah fungsi boleh laku. Kodnya adalah seperti berikut:

Salin kod Kod adalah seperti berikut: fungsi Bentuk()
{
var x=0;
var y=1;
This.draw=function()
{
            //cetak;
};
}



Kami menentukan cabutan dalam kod di atas dan menetapkan fungsi padanya Seterusnya, kami boleh memanggil fungsi ini melalui aShape, yang dipanggil kaedah awam dalam OOP, seperti:

Salin kod Kod adalah seperti berikut: aShape.draw();


Jika ditakrifkan dengan var, maka cabutan ini menjadi peribadi, yang dipanggil kaedah persendirian dalam OOP, seperti:

Salin kod Kod adalah seperti berikut:

fungsi Bentuk()
{
var x=0;
var y=1;
var draw=function()
{
            //cetak;
};
}

Dengan cara ini anda tidak boleh menggunakan aShape.draw untuk memanggil fungsi ini.

Pembina

Javascript tidak menyokong OOP, dan sudah tentu tiada pembina Walau bagaimanapun, kita boleh mensimulasikan pembina sendiri dan biarkan ia dipanggil secara automatik apabila objek dibuat seperti berikut:

Salin kod Kod adalah seperti berikut:

fungsi Bentuk()
{
var init = function()
{
//Kod pembina
};
init();
}

Pada penghujung Shape, kami secara buatan memanggil fungsi init Kemudian, apabila objek Shape dicipta, init akan sentiasa dipanggil secara automatik dan pembina kami boleh disimulasikan.

Pembina dengan parameter

Bagaimana untuk membuat pembina mengambil parameter? Sebenarnya, ia sangat mudah. ​​Hanya tulis parameter yang akan dihantar ke dalam senarai parameter fungsi, seperti:

Salin kod Kod adalah seperti berikut:

fungsi Bentuk(kapak,ay)
{
var x=0;
var y=0;
var init = function()
{
//Pembina
         x=ax;
y=ay;
};
init();
}

Dengan cara ini, kita boleh mencipta objek seperti ini:

Salin kod Kod adalah seperti berikut:

var aShape = new Shape(0,1);

Sifat statik dan kaedah statik

Bagaimana untuk menentukan sifat dan kaedah statik dalam Javascript? Seperti yang ditunjukkan di bawah:

Salin kod Kod adalah seperti berikut:
fungsi Bentuk(kapak,ay)
{
var x=0;
var y=0;
var init = function()
{
//Pembina
         x=ax;
y=ay;
};
init();
}
Shape.count=0; //Tentukan kiraan atribut statik Atribut ini adalah milik kelas, bukan objek.
Shape.staticMethod=function(){};//Tentukan kaedah statik

Dengan sifat dan kaedah statik, kita boleh mengaksesnya menggunakan nama kelas, seperti berikut:

Salin kod Kod adalah seperti berikut:
makluman ( aShape.count );
aShape.staticMethod();

Nota: Sifat dan kaedah statik adalah awam Setakat ini, saya tidak tahu cara menjadikan sifat dan kaedah statik peribadi~

Akses sifat awam dan peribadi kelas ini dalam kaedah

Akses sifat anda sendiri dalam kaedah kelas Javascript mempunyai kaedah akses yang berbeza untuk sifat awam dan sifat peribadi. Sila lihat kod berikut:

Salin kod Kod adalah seperti berikut:

fungsi Bentuk(kapak,ay)
{
var x=0;
var y=0;
This.gx=0;
This.gy=0;
var init = function()
{
           x=ax;//Untuk mengakses sifat peribadi, cuma tulis nama pembolehubah terus
y=ay;
This.gx=ax;//Untuk mengakses harta awam, anda perlu menambah ini.
sebelum nama pembolehubah This.gy=ay;
};
init();
}

Nota tentang ini

Menurut pengalaman pengarang, ini dalam kelas tidak selalu menunjuk ke objek kita sendiri Sebab utama adalah kerana Javascript bukan bahasa OOP Selain itu, fungsi dan kelas ditakrifkan dengan fungsi, yang sudah tentu akan menyebabkan beberapa masalah kecil.

Situasi di mana penunjuk ini menunjukkan ralat biasanya dalam pemprosesan acara Kami mahu fungsi ahli sesuatu objek bertindak balas kepada peristiwa apabila peristiwa dicetuskan, sistem akan memanggil fungsi ahli kami ini Penunjuk bukan lagi objek kita sendiri Sudah tentu, memanggil ini dalam fungsi ahli pasti akan menyebabkan ralat.

Penyelesaiannya ialah kita menyimpan ini dalam atribut peribadi pada permulaan mentakrifkan kelas Pada masa hadapan, kita boleh menggunakan atribut ini untuk menggantikan ini. Saya menggunakan kaedah ini untuk menggunakan penunjuk ini yang agak selamat dan tidak bimbang~

Mari ubah suai kod untuk menyelesaikan masalah ini. Bandingkan kod dalam Bahagian 6 dan anda akan faham:

Salin kod Kod adalah seperti berikut:

fungsi Bentuk(kapak,ay)
{
var _this=this; //Simpan ini dan gantikan ini dengan _ini pada masa hadapan, supaya anda tidak keliru dengan ini
var x=0;
var y=0;
_this.gx=0;
_this.gy=0;
var init = function()
{
           x=ax;//Untuk mengakses sifat peribadi, cuma tulis nama pembolehubah terus
y=ay;
​​​​ _this.gx=ax;//Untuk mengakses harta awam, anda perlu menambah ini.
sebelum nama pembolehubah ​​​​ _this.gy=ay;
};
init();
}

Di atas kita bercakap tentang cara mentakrifkan kelas dalam Javascript, mencipta objek kelas, mencipta sifat dan kaedah awam dan persendirian, mencipta sifat dan kaedah statik, mensimulasikan pembina dan membincangkan perkara ini yang terdedah kepada ralat.

Itu sahaja untuk bercakap tentang pelaksanaan OOP dalam Javascript Di atas adalah kandungan yang paling praktikal Secara amnya, Javascript digunakan untuk mentakrifkan kelas dan kod di atas sudah cukup untuk mencipta objek. Sudah tentu, anda juga boleh menggunakan mootools atau prototaip untuk menentukan kelas dan mencipta objek. Saya telah menggunakan rangka kerja mootools dan saya fikir ia adalah sangat baik ia mempunyai simulasi kelas Javascript yang lebih lengkap dan menyokong warisan kelas. Sudah tentu, jika anda menggunakan rangka kerja, anda perlu memasukkan fail pengepala js yang berkaitan dalam halaman web anda, jadi saya masih berharap pembaca boleh membuat kelas tanpa rangka kerja Dengan cara ini, kod itu lebih cekap, dan anda juga boleh lihat , ia tidak menyusahkan untuk membuat kelas yang mudah~

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn