Apakah antara muka dalam javascript
Dalam JavaScript, antara muka ialah pengisytiharan siri kaedah abstrak dan koleksi ciri kaedah Ia menyediakan cara untuk menerangkan kaedah yang perlu ada pada objek. Antara muka boleh menggalakkan kebolehgunaan semula kod, membantu menstabilkan komunikasi antara kelas yang berbeza, dan mengurangkan masalah yang timbul dalam proses mewarisi dua objek.
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi JavaScript 1.8.5, komputer Dell G3.
Apakah itu antara muka
Antara muka ialah pengisytiharan siri kaedah abstrak dan koleksi ciri kaedah ini semuanya abstract , perlu dilaksanakan oleh kelas tertentu, dan kemudian pihak ketiga boleh memanggil set kaedah abstrak ini untuk membenarkan kelas tertentu melaksanakan kaedah tertentu.
Antara muka ialah salah satu alat yang paling berguna dalam kotak alat pengaturcara JavaScript berorientasikan objek. Salah satu prinsip reka bentuk berorientasikan objek boleh guna semula yang dicadangkan dalam corak reka bentuk ialah "pengaturcaraan untuk antara muka dan bukannya pengaturcaraan pelaksanaan", yang kita panggil pengaturcaraan berorientasikan antara muka Kepentingan konsep ini jelas.
Tetapi masalahnya ialah dalam dunia JavaScript, tiada kaedah terbina dalam untuk mencipta atau melaksanakan antara muka, dan tiada set kaedah yang boleh menentukan sama ada objek melaksanakan sama dengan objek lain , yang menjadikan hubungan antara objek Sukar untuk menggunakannya secara bergantian Nasib baik, JavaScript mempunyai fleksibiliti yang sangat baik, yang memudahkan untuk mensimulasikan antara muka berorientasikan objek tradisional dan menambah ciri ini.
Antaramuka menyediakan cara untuk menentukan kaedah yang perlu ada pada objek Walaupun ia boleh menunjukkan maksud kaedah ini, ia tidak mengandungi pelaksanaan khusus. Dengan alat ini, objek boleh dikumpulkan mengikut sifat yang mereka sediakan.
Sebagai contoh, jika A dan B dan antara muka I, walaupun objek A dan objek B sangat berbeza, selagi kedua-duanya melaksanakan antara muka I, maka A boleh digunakan secara bergantian dalam A.I( B) kaedah dan B, seperti dalam B.I(A).
Anda juga boleh menggunakan antara muka untuk membangunkan persamaan antara kelas yang berbeza. Jika fungsi yang pada asalnya memerlukan kelas tertentu sebagai parameter ditukar kepada fungsi yang memerlukan antara muka khusus sebagai parameter, maka semua objek yang melaksanakan antara muka boleh dihantar kepadanya sebagai parameter Dengan cara ini, semua objek yang tidak berkaitan antara satu sama lain boleh dihantar kepadanya sebagai parameter juga boleh dianggap sama.
Kebaikan dan keburukan antara muka
Antara muka yang ditetapkan adalah deskriptif sendiri dan boleh menggalakkan kebolehgunaan semula kod Antara muka boleh memberikan sejenis maklumat untuk memberitahu kelas luaran Apa kaedah perlu dilaksanakan. Ia juga membantu menstabilkan kaedah komunikasi antara kelas yang berbeza dan mengurangkan masalah yang timbul dalam proses mewarisi dua objek.
Ini juga berguna untuk penyahpepijatan Dalam bahasa yang ditaip lemah seperti JavaScript, ketakpadanan taip sukar dijejaki Apabila menggunakan antara muka, jika masalah berlaku, akan terdapat mesej ralat yang lebih jelas. Sudah tentu, antara muka tidak sepenuhnya tanpa kekurangan Penggunaan antara muka yang meluas akan melemahkan fleksibiliti mereka sebagai bahasa yang ditaip lemah pada tahap tertentu Sebaliknya, JavaScript tidak mempunyai sokongan terbina dalam untuk antara muka, tetapi hanya mensimulasikan objek tradisional. antara muka berorientasikan Ini menjadikan JavaScript, yang sememangnya fleksibel, lebih sukar dikawal.
Selain itu, sebarang cara untuk melaksanakan antara muka akan mempunyai kesan prestasi, sebahagiannya disebabkan oleh overhed panggilan kaedah tambahan. Masalah terbesar dengan menggunakan antara muka ialah, tidak seperti bahasa lain yang ditaip kuat, JavaScript akan gagal untuk menyusun jika ia tidak mematuhi konvensyen antara muka dengan berkesan boleh mengelakkan masalah di atas Jika ia berada dalam persekitaran pembangunan kolaboratif, Antara mukanya berkemungkinan besar akan rosak tanpa menyebabkan sebarang ralat, yang tidak dapat dikawal.
Dalam bahasa berorientasikan objek, antara muka digunakan dengan cara yang hampir sama. Maklumat yang terkandung dalam antara muka menerangkan kaedah yang perlu dilaksanakan oleh kelas dan tandatangan kaedah ini. Takrif kelas mesti menyatakan secara eksplisit bahawa mereka melaksanakan antara muka ini, jika tidak, mereka tidak akan menyusun.
Jelas sekali kami tidak boleh melakukan perkara yang sama dalam JavaScript, kerana tiada antara muka dan melaksanakan kata kunci, dan tidak akan ada semakan pada masa jalan sama ada antara muka mengikut konvensyen, tetapi kami boleh menirunya melalui kaedah tambahan dan semak eksplisit kebanyakan sifatnya.
Cara melaksanakan antara muka dalam JavaScript
Terdapat tiga cara untuk melaksanakan antara muka dalam JavaScript:
(1) Komen terangkan antara muka
(2) Antara muka pengesanan atribut
(3) Antara muka pengenalan jenis itik
1. Antara muka penerangan ulasan: Tidak disyorkan
Kelebihan: Mudah dilaksanakan, tiada kelas atau fungsi tambahan diperlukan.
Kelemahan: Kekangan dokumen tulen, program tidak boleh menyemak sama ada objek yang melaksanakan antara muka melaksanakan semua kaedah antara muka
/** * interface Composite{ * function a(); * function b(); * } */ // CompositeImpl implements Composite var CompositeImpl = function(){ //业务逻辑 }; CompositeImpl.prototype.a = function(){ //业务逻辑 }; CompositeImpl.prototype.b = function(){ //业务逻辑 };
2
Kaedah kedua adalah lebih ketat. Semua kelas mengisytiharkan secara eksplisit antara muka yang mereka laksanakan dan objek yang ingin berinteraksi dengan kelas ini boleh menyemak pengisytiharan ini. Antara muka itu sendiri masih hanya anotasi, tetapi kini anda boleh mengetahui antara muka yang dituntut oleh kelas untuk dilaksanakan dengan memeriksa harta benda. Kelebihan: Keupayaan untuk menyemak antara muka yang dilaksanakan缺点:并未确保类真正实现了自称实现的接口。你只知道它是否说自己实现了接口。
var interfacesImpl = function(){ //在实现类内部用一个数组保存要实现的方法名 //通常这个属性名是团队中规定好的 //声明自己实现了这两个方法,但实际上并不一定 this.implementsInterfaces = ["Composite","FormItem"]; }; //专门为这个实现对象写一个检测函数,传入实例对象,用于检查实例对象是否实现了所有接口 function checkImplements(obj){ //调用检查方法 obj是否实现了两个接口,如果没有都实现则抛出异常 if(!isImplements(obj,"Composite","FormItem")){ throw new Error("接口没有全部实现!"); } //obj是要检查的对象 function isImplements(obj){ //传入的第0个参数是要检查的对象,所以从1开始检查 for(var i=1; i<arguments.length; i++){ //接收接口中每个接口的名字 var interfaceName = arguments[i]; //默认未实现该接口 var foundFlag = false; //循环查询传入实例对象的实现接口数组,检查是否全部实现 for(var j=0; j<obj.implementsInterfaces.length; j++){ //如果实现了这个接口,就修改标记并跳出 //debugger if(obj.implementsInterfaces[j] == interfaceName){ foundFlag = true; break; } } //如果遍历实现接口数组之后没找到,返回false if(!foundFlag){ return false; } } return true; } } //使用实例对象并检测 var o = new interfacesImpl(); checkImplements(o);
3、鸭式辨型法:推荐
背后的观点:如果对象具有与接口定义的方法同名的所有方法,那么久可以认为它实现了这个接口。
/** * 接口类 * * @param {String} name 接口的名字 * @param {Array} methods 要实现方法名称的数组 */ var Interface = function (name, methods) { //判断参数个数 if(arguments.length !== 2){ throw new Error("接口构造器参数必须是两个!"); } this.name = name; this.methods = []; for(var i=0; i<methods.length; i++){ if(typeof methods[i] !== "string"){ throw new Error("接口实现的函数名称必须是字符串!"); } this.methods.push(methods[i]); } } //实例化接口对象---传入接口名和要实现的方法数组 var CompositeInterface = new Interface("CompositeInterface",["add","remove"]); var FormItemInterface = new Interface("FormItemInterface",["update","select"]); //实现接口的类 var CompositeImpl = function(){ } //实现接口的方法 CompositeImpl.prototype.add = function(obj){ //... } CompositeImpl.prototype.remove = function(obj){ //... } CompositeImpl.prototype.select = function(obj){ //... } //在这里少实现一个方法,下面检查是否全部实现了接口 // CompositeImpl.prototype.update = function(obj){ // //... // } //实例化 实现接口的对象 var c = new CompositeImpl(); //检验接口里的方法是否全部实现,如果不通过则抛出异常 Interface.ensureImplements = function(obj){ //如果接收到参数小于2,说明异常 if(arguments.length < 2){ throw new Error("接口检查方法的参数必须多余两个!"); } //接口实现检查 for(var i=0,len = arguments.length; i<len; i++){ //获取当前接口 var instanceInterface = arguments[i]; //判断接收到的是不是接口的对象,如果不是则抛出异常 if(instanceInterface.constructor !== Interface){ throw new Error("接口检测函数必须传入接口对象!"); } //检查实例化接口的对象是不是实现了接口里的所有方法 for(var j=0; j<instanceInterface.methods.length; j++){ //接收到的字符串方法 var methodName = instanceInterface.methods[j]; //如果obj里面没有methodsName这个方法,或者有这个属性但是不是函数,就抛出异常 if(!obj[methodName] || typeof obj[methodName] !== "function"){ throw new Error("接口方法" + methodName + "没有实现!"); } } } } //传入要检查的类,和要实现的所有接口对象 Interface.ensureImplements(c, CompositeInterface, FormItemInterface); c.add();
【相关推荐:javascript学习教程】
Atas ialah kandungan terperinci Apakah antara muka dalam javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Apabila kami memasang komputer, walaupun proses pemasangannya mudah, kami sering menghadapi masalah dalam pendawaian Selalunya, pengguna tersilap memasangkan talian bekalan kuasa radiator CPU ke SYS_FAN Walaupun kipas boleh berputar, ia mungkin tidak berfungsi apabila komputer dihidupkan. Akan terdapat ralat F1 "CPUFanError", yang juga menyebabkan penyejuk CPU tidak dapat melaraskan kelajuan secara bijak. Mari kita berkongsi pengetahuan bersama tentang antara muka CPU_FAN, SYS_FAN, CHA_FAN dan CPU_OPT pada papan induk komputer. Sains popular pada antara muka CPU_FAN, SYS_FAN, CHA_FAN dan CPU_OPT pada papan induk komputer 1. CPU_FANCPU_FAN ialah antara muka khusus untuk radiator CPU dan berfungsi pada 12V

Sebagai bahasa pengaturcaraan yang moden dan cekap, bahasa Go mempunyai paradigma pengaturcaraan yang kaya dan corak reka bentuk yang boleh membantu pembangun menulis kod yang berkualiti tinggi dan boleh diselenggara. Artikel ini akan memperkenalkan paradigma pengaturcaraan biasa dan corak reka bentuk dalam bahasa Go dan memberikan contoh kod khusus. 1. Pengaturcaraan berorientasikan objek Dalam bahasa Go, anda boleh menggunakan struktur dan kaedah untuk melaksanakan pengaturcaraan berorientasikan objek. Dengan mentakrifkan struktur dan kaedah mengikat kepada struktur, ciri berorientasikan objek bagi pengkapsulan data dan pengikatan tingkah laku boleh dicapai. packagemaini

Pengenalan kepada antara muka PHP dan bagaimana ia ditakrifkan PHP ialah bahasa skrip sumber terbuka yang digunakan secara meluas dalam pembangunan Web Ia fleksibel, mudah dan berkuasa. Dalam PHP, antara muka ialah alat yang mentakrifkan kaedah biasa antara pelbagai kelas, mencapai polimorfisme dan menjadikan kod lebih fleksibel dan boleh digunakan semula. Artikel ini akan memperkenalkan konsep antara muka PHP dan cara mentakrifkannya, dan menyediakan contoh kod khusus untuk menunjukkan penggunaannya. 1. Konsep antara muka PHP Antara muka memainkan peranan penting dalam pengaturcaraan berorientasikan objek, mentakrifkan aplikasi kelas

Sebab ralat adalah dalam python Sebab mengapa NotImplementedError() dilemparkan dalam Tornado mungkin kerana kaedah atau antara muka abstrak tidak dilaksanakan. Kaedah atau antara muka ini diisytiharkan dalam kelas induk tetapi tidak dilaksanakan dalam kelas anak. Subkelas perlu melaksanakan kaedah atau antara muka ini untuk berfungsi dengan baik. Cara menyelesaikan masalah ini adalah dengan melaksanakan kaedah abstrak atau antara muka yang diisytiharkan oleh kelas induk dalam kelas kanak-kanak. Jika anda menggunakan kelas untuk mewarisi daripada kelas lain dan anda melihat ralat ini, anda harus melaksanakan semua kaedah abstrak yang diisytiharkan dalam kelas induk dalam kelas anak. Jika anda menggunakan antara muka dan anda melihat ralat ini, anda harus melaksanakan semua kaedah yang diisytiharkan dalam antara muka dalam kelas yang melaksanakan antara muka. Jika anda tidak pasti yang mana

Sebagai sistem pengendalian baharu yang dilancarkan oleh Huawei, sistem Hongmeng telah menimbulkan kekecohan dalam industri. Sebagai percubaan baharu Huawei selepas larangan AS, sistem Hongmeng mempunyai harapan dan harapan yang tinggi. Baru-baru ini, saya cukup bernasib baik untuk mendapatkan telefon mudah alih Huawei yang dilengkapi dengan sistem Hongmeng Selepas tempoh penggunaan dan ujian sebenar, saya akan berkongsi beberapa ujian berfungsi dan pengalaman penggunaan sistem Hongmeng. Mula-mula, mari kita lihat antara muka dan fungsi sistem Hongmeng. Sistem Hongmeng mengguna pakai gaya reka bentuk Huawei sendiri secara keseluruhan, yang mudah, jelas dan lancar dalam operasi. Di desktop, pelbagai

Java membenarkan kelas dalaman ditakrifkan dalam antara muka dan kelas abstrak, memberikan fleksibiliti untuk penggunaan semula kod dan modularisasi. Kelas dalaman dalam antara muka boleh melaksanakan fungsi tertentu, manakala kelas dalaman dalam kelas abstrak boleh mentakrifkan fungsi umum, dan subkelas menyediakan pelaksanaan konkrit.

Antara muka dan kelas abstrak digunakan dalam corak reka bentuk untuk penyahgandingan dan kebolehlanjutan. Antara muka mentakrifkan tandatangan kaedah, kelas abstrak menyediakan pelaksanaan separa, dan subkelas mesti melaksanakan kaedah yang tidak dilaksanakan. Dalam corak strategi, antara muka digunakan untuk menentukan algoritma, dan kelas abstrak atau kelas konkrit menyediakan pelaksanaan, membenarkan penukaran dinamik algoritma. Dalam corak pemerhati, antara muka digunakan untuk menentukan tingkah laku pemerhati, dan kelas abstrak atau konkrit digunakan untuk melanggan dan menerbitkan pemberitahuan. Dalam corak penyesuai, antara muka digunakan untuk menyesuaikan kelas yang sedia ada atau kelas konkrit boleh melaksanakan antara muka yang serasi, membenarkan interaksi dengan kod asal.

Antara Muka Antaramuka mentakrifkan kaedah abstrak dan pemalar dalam Java. Kaedah dalam antara muka tidak dilaksanakan, tetapi disediakan oleh kelas yang melaksanakan antara muka. Antara muka mentakrifkan kontrak yang memerlukan kelas pelaksanaan untuk menyediakan pelaksanaan kaedah tertentu. Isytiharkan antara muka: publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} Kelas abstrak Kelas abstrak ialah kelas yang tidak boleh dibuat instantiated. Ia mengandungi campuran kaedah abstrak dan bukan abstrak. Sama seperti antara muka, kaedah abstrak dalam kelas abstrak dilaksanakan oleh subkelas. Walau bagaimanapun, kelas abstrak juga boleh mengandungi kaedah konkrit, yang menyediakan pelaksanaan lalai. Isytiharkan kelas abstrak: publicabstractcl
