ما الفرق بين "__proto__" و "prototype"؟


الاجابه 1:

ليس

  • __proto__ هو النموذج الأولي الفعلي ، لكن لا تستخدمه .. كان من المفترض أن يقوم constructor.prototype بالقيام بنفس الشيء مثل __proto__ ولكن وظيفته المعطلة في الغالب. ونموذج الوظيفة الخاص به.

النموذج المبدئي

.__ proto__

__proto__

__proto__

هو في الواقع

جديد

.النموذج المبدئي

Function.prototype

__proto__

.constructor.prototype

.البناء

Object.isPrototypeOf

Object.getPrototypeOf


الاجابه 2:

يقال إن برمجة الكائنات في JavaScript "تعتمد على النموذج الأولي"

لتعريف واجهة برمجة التطبيقات الموروثة ، تقوم بإنشاء كائن نموذج أولي بطرق وربما قيم بعض الخصائص الافتراضية.

تحتوي جميع مثيلات `Function` (الدالات هي كائنات في JavaScript) على خاصية 'prototype' فارغة فارغة يمكن تمديدها أو استبدالها. إذا تم استدعاء هذه الوظيفة كمنشئ باستخدام عامل التشغيل "الجديد" ، ستصبح هذه الخاصية "النموذج الأولي" الخاصية الداخلية "[النموذج الأولي]" للحالات ، حيث سيتم البحث من واجهات برمجة التطبيقات الخاصة بهم الموروثة

يمكن أيضًا تعريف هذا النموذج الأولي ككائن جديد عادي وحقنه يدويًا:

  • على كائن موجود عبر Object.setPrototypeOf () ، يُستخدم بدون وظيفة مُنشئ من خلال Object.create () ، يتجاوز خاصية النموذج الأولي للوظيفة الافتراضية عبر التأثير الحرفي ، أو Object.assign () ، أو Object.defineProperty ()

لفترة طويلة لم يكن الوصول إلى [النموذج الأولي] لكائن رسميًا للتفتيش أو التعديل. إحدى طرق القيام بذلك هي فحص خاصية "المنشئ" الموروثة للكائن ، لكن كان من الممكن تجاوزه بسهولة.

ثم قدمت Mozilla المساعد غير الرسمي __proto__.

ثم حدد TC39 (مجموعة عمل ECMAScript) واجهة تعامل API الرسمية setPrototypeOf () / getPrototypeOf ().

ثم مرة أخرى TC39 ، تحقق من __proto__ API