هناك ثلاث طرق لتقليد واجهة JavaScript: 1. طريقة التعليق 2. تحقق من طريقة السمة 3.
1. طريقة التعليق: تنتمي هذه الطريقة إلى فئة مستندات البرنامج ، ويعتمد ميراث وتنفيذ الواجهات بوعي تمامًا على المبرمجين.
/*واجهة الأشخاص {function createhead () ؛ function createbody () ؛}*/var woman = function (name) {// تنفذ الأشخاص interfacethis.name = name ؛ تم إنشاؤه ") ؛} woman.prototype.createhead = function () {Alert (" تم إنشاء الرأس ") ؛}// 2. طريقة فحص السمة: أضف طريقة الواجهة التي سيتم تنفيذها إلى قائمة سمات الفئة ، وتحقق بشكل متكرر ما إذا كانت هذه الطرق قد تم تنفيذها من خلال الكشف المحدد.
// Pros and Cons: يمكنك إجبار المبرمجين على تنفيذ الواجهة ، وإذا لم تدرك ذلك ، فستبلغ عن خطأ. ومع ذلك ، على الرغم من أنها تعلن عن الأساليب التي قمت بتطبيقها ، فمن المحتمل أن تكون هناك إغفال أثناء التنفيذ
/*واجهة الأشخاص {function createhead () ؛ function createbody () ؛}*/var woman = function (name) {this.name = name ؛ this.implemsInterfaces = ['people'] ؛ تم إنشاؤه ") ؛} woman.prototype.createhead = function () {Alert (" تم إنشاء رأس ") j = 0 ؛ j <obj.implementsInterfaces.length ؛ j ++) {if (obj.implementsInterfaces [j] = interfacename) {interfacefound = true ؛ break ؛ إذا (! تنفيذ (مثيل ، واجهات)) {رمي خطأ جديد ("الكائن لا ينفذ واجهة مطلوبة") ؛}}3. طريقة تحديد نمط البطة: ( لا يتم الحكم على البط من خلال المظهر ، ولكن بما إذا كان لديه خصائص بطة. كما قال جيمس وايتكومب رايلي ، الشخص الذي يمشي مثل البطة والمشاجرات هو البطة)
يعلن كل من ما سبق أنهما قاموا بتنفيذ الواجهات ، لكن البيان غير مهم. جوهر تنفيذ الواجهة هو أن الفئة تنفذ مجموعة طريقة الواجهة. إذا كان للفئة وظائف تحمل اسم وظيفة الطريقة نفسها كما هو محدد ، فسيتم اعتبارها لتنفيذ الواجهة
// فئة الواجهة ، المستخدمة لإنشاء واجهة var interface = function (name ، motheds) {if (agruments.length! = 2) {رمي خطأ جديد ("واجهة مُدعى مع"+encuments.length+"الوسيطات ، ولكنها توقعت بالضبط 2") ؛} this.name = this.methods = [] mothereds [i]! == 'string') {رمي خطأ جديد ('مُنشئ الواجهة يتوقع أن تكون الأسماء المقطوعة "+" تمر كسلسلة ") ؛} this.methods.push (motheds [i]) ؛}} "+enduments.length+" الوسائط ، ولكن توقع بالضبط 1 ")} لـ (var i = 0 ؛ i <objs.length ؛ i ++) {var obj = objs [i] ؛ for (var j = 0 ؛ 'function') {رمي خطأ جديد ('واجهة الدالة. name ؛ this.implementsInterfaces = ['people'] ؛} woman.prototype.showname = function () {Alert (this.name) ؛} woman.prototype.createBody = function () {// تنفيذ الطريقة الضرورية ("تم إنشاء جثة المرأة") ؛} تم إنشاؤه ") ؛} // الفئة الفرعية var man = function (name) {this.name = name ؛ this.implementInterFaces = ['people'] ؛ تم إنشاؤه ") ؛} man.prototype.createhead = function () {Alert (" تم إنشاء رأس الرجل ") ؛} // الدفاع عن ما إذا كان يجب تنفيذ poeple.ensureimplements ([" امرأة "، 'man']) ؛