1. طريقة الحكم على صفيف حقيقي
أسهل طريقة لإعلان صفيف في جافا سكريبت هي:
var a = [] ؛
الطريقة الأكثر مباشرة لتحديد ما إذا كانت صفيف هي:
نسخة الكود كما يلي:
مجموعة مثيل / /صحيح
A.Constructor == صفيف // صحيح
هنا يأتي مثيل بناء الجملة. مثيل هو عامل سحابة. مثل "+-*/" ، بناء الجملة هو كما يلي:
النتيجة = فئة OBJ
يتم استخدامه لتحديد ما إذا كان الكائن هو مثيل للفئة ، ونتيجة العملية تُرجع صحيحة أو خاطئة. تتم تهيئة تعريف الفئة في javaScript من خلال مُنشئ ، لذلك يجب أن يكون المشغل المناسب لمثلة بناء الجملة من وظيفة ، أي ، يجب أن تكون وظيفة مثيل الفئة صحيحًا ، وإذا لم يكن المشغل المناسب وظيفة عند استخدام مثيل ، فسيتم طرح استثناء من النوع. جميع الكائنات هي مثيلات للكائن ، لذلك يعيد أي كائن كائن كائن صحيح. على الرغم من أننا نقول أنه يتم تهيئة الكائنات من خلال المُنشئين ، فإن مثيل OF لا يتحقق مما إذا كان الكائن تم إنشاؤه بواسطة الوظيفة ، ولكنه يرثه النموذج الأولي للمركبة. المثال التالي يمكن أن يوضح هذه المشكلة:
نسخة الكود كما يلي:
نطاق الوظائف (منخفض ، مرتفع) {
this.low = low ؛
this.high = عالية ؛
}
Range.prototype.constructor == Range ؛ //حقيقي
Range.Prototype = {
تضمين: الدالة (x) {return (x> = this.low && x <= this.high) ؛ } ،
Explude: function (x) {return (x <this.low && x> this.high) ؛ }
}
var r = نطاق جديد (0 ، 100) ؛
R extryof Range ؛ //خطأ شنيع
R extremof كائن ؛ //حقيقي
range.prototype.constructor == object ؛ //حقيقي
على الرغم من أن R تم بناؤه من خلال نطاق جديد ، إلا أن R ليس مثيلًا للنطاق. هذه هي المشكلة. يقوم عبارة "التخصيص النمطية". قبل تعيين النموذج الأولي ، يكون النموذج. النموذج prototructor هو نطاق ، وبعد إجراء المهمة ، يصبح كائنًا. هذا سهل الفهم بسبب
نسخة الكود كما يلي:
Range.Prototype = {
تضمين: الدالة (x) {return (x> = this.low && x <= this.high) ؛ } ،
Explude: function (x) {return (x <this.low && x> this.high) ؛ }
}
في الواقع يعادل:
نسخة الكود كما يلي:
Range.Prototype = كائن جديد ({
تضمين: الدالة (x) {return (x> = this.low && x <= this.high) ؛ } ،
Explude: function (x) {return (x <this.low && x> this.high) ؛ }
}) ؛
SO Range.prototype.constructor == كائن ، فإن المثيل الذي تم إنشاؤه من خلال نطاق جديد هو بالطبع مثيل للكائن.
من المباشر رؤية التفسير الرسمي:
لم يتحقق مثيل المشغل فعليًا ما إذا كان قد تم تهيئة R بواسطة مُنشئ النطاق. يتحقق مما إذا كان يرث من النموذج. النموذج.
هناك أيضًا نوع وظيفة في JavaScript له وظائف مماثلة مثل مثيل ، ولكنه يعيد أنواع بيانات أساسية محددة: الرقم ، السلسلة ، الوظيفة ، الكائن ، غير المحدد ، المنطقية. لا يوجد سوى هذه الأنواع الستة ، وأولئك الذين ليسوا ضمن هذه الأنواع الستة يعيد كائن ، أي أن typeof ([]) يعيد الكائن ، وليس الصفيف.
بناء جملة آخر هو مُنشئ ، يقوم مُنشئ بإرجاع مُنشئ الكائن:
نسخة الكود كما يلي:
var a = [] ؛
A.Constructor ؛ // صفيف
المنشئ هو وظيفة تهيئة الكائن ، والتي تستخدم مكالمات جديدة. إذا كان الكائن عبارة عن صفيف ، فيجب أن يكون مُنشئه صفيفًا ، والفصل الذي كتبته ليس بالضرورة صحيحًا ، لأنه قد يتم تغيير المُنشئ في النموذج الأولي.
2. طريقة الحكم على المباراة الزائفة
هناك عائق زائفة في جافا سكريبت. يمكن اجتيازها باستخدام طريقة اجتياز مماثلة للمصفوفة. لديها سمة طول للحصول على طول العنصر. يمكنك استخدام المشترك [] للحصول على العنصر المحدد. نحن نسمي هذا النوع من الكائن راعها الزائفة. الكائن الموجود في jQuery هو عائق زائف نموذجي ، كما هو موضح في الشكل أدناه:
لذلك ، فإن مفتاح الحكم على ما إذا كان هو المباراة الزائفة هو الحكم على ما إذا كانت هناك سمة طول وما إذا كان هناك لصق وظيفة تشغيل أساسية. ما يلي هو طريقة الحكم:
نسخة الكود كما يلي:
var is_array = function (value) {
قيمة الإرجاع &&
typeof value === 'Object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
! (value.propertyisEnumerable ('length')) ؛
} ؛
هنا يتم استخدام PropertyIsEnumerable لتحديد ما إذا كانت خاصية الطول لا يمكن التعداد. في الواقع ، يكون لكائن السلسلة الأصلي أيضًا تأثير صفيف ، لكن لا يمكننا معاملته ككائن صفيف ، لذلك نحتاج إلى الحكم على قيمة typeof == "كائن" ، لأن typeof كائن سلسلة يرجع سلسلة.