มีสามวิธีในการเลียนแบบอินเตอร์เฟส JavaScript: 1. วิธีการแสดงความคิดเห็น 2. วิธีการตรวจสอบวิธีการคุณลักษณะ 3. วิธีการระบุรูปร่างสไตล์เป็ด
1. วิธีการแสดงความคิดเห็น: วิธีนี้เป็นของหมวดหมู่ของเอกสารโปรแกรมและการสืบทอดและการใช้งานอินเตอร์เฟสนั้นขึ้นอยู่กับโปรแกรมเมอร์อย่างมีสติ
/*อินเทอร์เฟซคน {ฟังก์ชั่น createhead (); ฟังก์ชั่น createbody ();}*/var woman = function (ชื่อ) {// ใช้ผู้คน interfacethis.name = name;} woman.prototype.showname = function () {แจ้งเตือน (this.name); สร้าง ");} woman.prototype.createhead = function () {Alert (" หัวถูกสร้างขึ้นแล้ว ");}// 2. วิธีการตรวจสอบแอตทริบิวต์: เพิ่มวิธีการอินเตอร์เฟสที่จะนำไปใช้กับรายการแอตทริบิวต์คลาสและตรวจสอบซ้ำ ๆ ว่าวิธีการเหล่านั้นถูกนำไปใช้ผ่านการตรวจจับที่กำหนดไว้หรือไม่
// ข้อดีและข้อเสีย: คุณสามารถบังคับให้โปรแกรมเมอร์ใช้อินเทอร์เฟซและหากคุณไม่ทราบคุณจะรายงานข้อผิดพลาด อย่างไรก็ตามแม้ว่าจะประกาศว่าวิธีการที่คุณใช้
/*อินเทอร์เฟซคน {ฟังก์ชั่น createhead (); ฟังก์ชั่น createBody ();}*/var woman = function (ชื่อ) {this.name = name; this.implementsInterfaces = ['people'];} woman.prototype.showname = function () สร้างขึ้น ");} woman.prototype.createhead = function () {alert (" หัวถูกสร้างขึ้นแล้ว ");} การใช้งาน (obj, อินเตอร์เฟส) {สำหรับ (var i = 1; i <interfaces.length; i ++) {var interfacename = อินเทอร์เฟซ j = 0; j <obj.implementsInterfaces.length; j ++) {ถ้า (obj.implementsinterfaces [j] = interfacename) {interfacefound = true; break;}} ถ้า (! interfacefound) {return false; if (! emplement (อินสแตนซ์อินเทอร์เฟซ)) {โยนข้อผิดพลาดใหม่ ("วัตถุไม่ได้ใช้อินเตอร์เฟสที่ต้องการ");}}3. วิธีการระบุสไตล์เป็ด: ( เป็ดไม่ได้ถูกตัดสินจากรูปลักษณ์ แต่ไม่ว่าจะมีลักษณะของเป็ดในขณะที่เจมส์วิทคอมบ์ไรลีย์กล่าวคนที่เดินเหมือนเป็ดและทะเลาะกันเป็นเป็ด)
ทั้งสองข้างต้นประกาศว่าพวกเขาได้ดำเนินการอินเทอร์เฟซ แต่คำสั่งไม่สำคัญ แกนหลักของการใช้งานอินเตอร์เฟสคือคลาสใช้วิธีการตั้งค่าอินเตอร์เฟส หากคลาสมีฟังก์ชั่นที่มีชื่อฟังก์ชันวิธีการเดียวกันกับอินเทอร์เฟซที่กำหนดไว้จะพิจารณาว่าใช้อินเตอร์เฟส
// คลาสอินเตอร์เฟสใช้เพื่อสร้างอินเตอร์เฟสอินเทอร์เฟซ VAR = ฟังก์ชั่น (ชื่อ, motheds) {ถ้า (agruments.length! = 2) {โยนข้อผิดพลาดใหม่ ("ตัวสร้างอินเตอร์เฟสที่เรียกด้วย"+อาร์กิวเมนต์. length+"อาร์กิวเมนต์ แต่คาดว่า 2");} this.name = name; Mothereds [i]! == 'String') {โยนข้อผิดพลาดใหม่ ('Interface Constructor คาดว่าชื่อ Mothed จะเป็น'+'ผ่านเป็นสตริง');} this.methods.push (motheds [i]);}} interface.prototype.ensureimplement "+arguments.length+" อาร์กิวเมนต์ แต่คาดว่า 1 ")} สำหรับ (var i = 0; i <objs.length; i ++) {var obj = objs [i]; สำหรับ (var j = 0; j <this.motheds.length; j ++) {var mothed = this.methods 'function') {โยนข้อผิดพลาดใหม่ ('ฟังก์ชั่นอินเทอร์เฟซ. VenureImplements: ใช้อินเทอร์เฟซ'+this.name+', obj.mothed'+mothed+'ไม่พบ');}}}} // สร้าง interface var people = new Interface ('people' ชื่อ; this.implementsInterfaces = ['people'];} woman.prototype.showname = function () {Alert (this.name);} woman.prototype.createbody = function () {// ใช้วิธีการแจ้งเตือนที่จำเป็น สร้าง ");} // subclass var man = ฟังก์ชั่น (ชื่อ) {this.name = name; this.implementsInterfaces = ['people'];} man.prototype.showname = function () {Alert (this.name); สร้างขึ้น ");} man.prototype.createhead = function () {แจ้งเตือน (" หัวของผู้ชายถูกสร้างขึ้น ");} // ปกป้องว่าจะใช้ poeple.ensureimplements (['ผู้หญิง', 'ผู้ชาย']);