مقدمة لمشغل مثيل
في JavaScript ، الحكم على نوع المتغير ، سوف تستخدم مشغل typeof. عند استخدام مشغل typeof ، سيكون لديك مشكلة باستخدام نوع مرجع لتخزين القيمة. بغض النظر عن نوع الكائن الذي يتم الرجوع إليه ، سيعود "كائن". يقدم ECMASCript مثيل مشغل Java آخر لحل هذه المشكلة. يشبه عامل التشغيل من مشغل typeof ويستخدم لتحديد نوع الكائن الذي يتم معالجته. على عكس طريقة typeof ، تتطلب طريقة مثيل من المطور أن يؤكد صراحة أن الكائن هو نوع محدد. على سبيل المثال:
قائمة 1. مثال على سبيل المثال
var ostringObject = سلسلة جديدة ("Hello World") ؛ console.log (stringObject مثيل string) ؛ // الإخراج "صحيح"يسأل هذا الرمز "هل المتغير ostringObject مثيل لكائن السلسلة؟" OstringObject هو في الواقع مثيل لكائن السلسلة ، وبالتالي فإن النتيجة هي "صحيحة". على الرغم من أنها ليست مرنة مثل طريقة typeof ، إلا أن طريقة مثيل OF مفيدة عندما تقوم طريقة typeof بإرجاع "كائن".
الاستخدام العام لمشغل مثيل:
بشكل عام ، فإن استخدام مثيل OF هو تحديد ما إذا كان مثيلًا ينتمي إلى نوع معين. على سبيل المثال:
سرد 2. الاستخدام العام لمثيل
// تحديد ما إذا كان FOO هو مثيل FOO Class Function Foo () {} var foo = new foo () ؛ console.log (foo مثيل foo) // صحيحبالإضافة إلى ذلك ، هناك نقطة أكثر أثقل هي أنه يمكن استخدام مثيل EF في علاقات الميراث لتحديد ما إذا كان مثيلًا ينتمي إلى نوع الأم. على سبيل المثال:
سرد 3. استخدام مثيل في علاقات الميراث
// حدد ما إذا كان FOO هو مثيل لفئة FOO وما إذا كان مثيلًا لدالة نوع الوالدين AOOO () {} food () {} foo.prototype = new aoo () ؛ // javaScript Orgenitance Var foo = new foo () ؛ console.log (foo مثيل من foo) // true console.log (foo مثيل AOO) // صحيحفي الكود أعلاه ، يتم الحكم على فئة الوالدين في طبقة من علاقة الميراث. في علاقة الميراث متعدد الطبقات ، ينطبق عامل مثيل OF أيضًا.
هل تفهم حقًا عامل التشغيل؟
بعد قراءة مثال الرمز أعلاه ، هل تعتقد أن مشغل مثيل OF بسيط للغاية؟ دعونا نلقي نظرة على بعض الاستخدام المعقد.
قائمة 4. مثيل الاستخدام المعقد
console.log (Object extryof Object) ؛ // true console.log (function eastyof function) ؛ // true console.log (number extryof number) ؛ // false console.log (string extryof string) ؛
هل أنت مرتبك مرة أخرى بعد قراءة الكود أعلاه؟ لماذا الكائن والوظيفة مثيل أنفسهم على قدم المساواة ، في حين أن مثيل آخر من أنفسهم ليسا صحيحا؟ كيف تشرح ذلك؟ لفهمغ بشكل أساسي لغز مثيل OF ، نحتاج إلى البدء من جانبين: 1. كيفية تحديد هذا المشغل في مواصفات اللغة. 2. آلية الميراث النموذج الأولي JavaScript.
قائمة 5. JavaScript مثيل رمز المشغل
Function evalue_of (l ، r) {// l يمثل التعبير الأيسر ، r يمثل التعبير الصحيح var o = r.prototype ؛ // خذ النموذج الأولي لـ r l = l .__ proto __ ؛ // أخذ النموذج الأولي الضمني لـ l بينما (صحيح) إذا (o === l) // ، إليك النقطة: عندما تكون O مساوية تمامًا لـ L ، ارجع صوابًا ؛ l = l .__ proto__ ؛ }}قائمة 6. كائن كائن كائن
// من أجل راحة التعبير ، تميز أولاً بين التعبير الأيسر والكائن التعبير الأيمن = كائن ، كائن = كائن ؛ .
قائمة 7. وظيفة وظيفة
// من أجل راحة التعبير ، تميز أولاً بين التعبير الأيسر ودالة التعبير اليمنى = الدالة ، وظيفة = دالة ؛ // ما يلي هو استنتاج O = functionr.prototype = function.prototype l = functionl .__ proto__ = function.prototype // الحكم الأول o == l // return true
قائمة 8. FOO مثيل FOO
// من أجل راحة التعبير ، تميز أولاً بين التعبير الأيسر والتعبير الأيمن Fool = foo ، foor = foo ؛ // ما يلي هو الاستنتاج تدريجياً وفقًا للمواصفات o = foor.prototype = foo.prototype l = fool .__ proto__ = function.prototype // الحكم الأول هو o! = l // الحكم الأول هو o! الدورة هي أن تجد ما إذا كان L لا يزال لديه __proto__ l = object.prototype .__ proto__ = null // الحكم الثالث l == null // return false
باختصار تحليل تطبيق مثيل OF في آلية الميراث dojo
في JavaScript ، لا يوجد مفهوم للميراث المتعدد ، تمامًا مثل Java. ومع ذلك ، عند إعلان الفصول الدراسية في دوجو ، يُسمح بالميراث من فصول متعددة. لنأخذ Dojo 1.6.1 كمثال.
قائمة 9. ميراث متعدد في دوجو
dojo.declare ("aoo" ، null ، {}) ؛ dojo.declare ("boo" ، null ، {}) ؛ dojo.declare ("foo" ، [aoo ، boo] ، {}) ؛ var foo = new foo () ؛ console.log (foo easureof aoo) ؛ // true console.log (foo easuleof boo) ؛ // false console.log (foo.isinstanceof (aoo)) ؛ // true console.log (foo.isinstanceof (boo)) ؛في المثال أعلاه ، يرث FOO من كل من AOO و BOO ، ولكن عند استخدام عامل التشغيل من أجل التحقق مما إذا كان FOO هو مثيل بوو ، فإنه يعود خطأ. في الواقع ، لا يزال FOO داخل Dojo ، لا يزال يرث فقط من AOO ، ويستخدم آلية Mixin لنسخ الأساليب والخصائص في فئة BOO إلى FOO. لذلك ، عند استخدام عامل التشغيل من أجل التحقق مما إذا كان مثيل بوو ، سيتم إرجاع خطأ. لذلك يضيف Dojo طريقة جديدة تسمى isInstanceof لكل مثيل فئة ، ويستخدم هذه الطريقة للتحقق من وراث متعددة.