قواعد
Object extryof constructor
المعلمة
هدف:
الكائن ليتم اكتشافه.
مُنشئ:
مُنشئ
يصف:
يتم استخدام مشغل مثيل OF لاكتشاف ما إذا كان النموذج المُنشئ.
// تحديد وظيفة المنشئ c () {} الدالة d () {} var o = new c () ؛ // true ، لأن object.getProtypeOf (o) === c.prototypeo extalof c ؛ // false ، لأن d.prototype ليس على سلسلة النموذج الأولي لـ O extryof d ؛ o كائن مثيل ؛ // صحيح ، لأن Object.prototype.isprototypeof (O) إرجاع truec.prototype مثيل Object // true ، كما هو موضح أعلاه c.prototype = {} ؛ var o2 = new c () ؛ O2 estanceof c ؛ // trueo مثيل C ؛ // false ، يشير C.Prototype إلى كائن فارغ ، والذي ليس على سلسلة النموذج الأولي لـ O.D.Prototype = جديد C () ؛ // errant var o3 = new d () ؛ o3 مثيل d ؛ // trueo3 مثيل C ؛ // حقيقيتجدر الإشارة إلى أنه إذا تم إرجاع حالة التعبير OBJ foo بشكل صحيح ، فهذا لا يعني أن التعبير سيعود إلى الأبد ، لأن قيمة خاصية Foo.Prototype قد تتغير ، وقد لا توجد القيمة المتغيرة على سلسلة النموذج OBJ ، وستصبح قيمة التعبير الأصلي خاطئة. في حالة أخرى ، ستتغير قيمة التعبير الأصلي أيضًا ، وهي الحالة التي يتم فيها تغيير سلسلة النموذج الأولي للكائن OBJ. على الرغم من أن مواصفات ES الحالية ، لا يمكننا سوى قراءة النموذج الأولي للكائن ولا يمكننا تغييره ، إلا أنه يمكن تحقيقه بمساعدة السمة السحرية غير القياسية. على سبيل المثال ، بعد تنفيذ OBJ .__ proto__ = {} ، ستعود OBJ extryof foo false.
كائنات مثيل وكائنات متعددة العظام (التفاعل بين إطارات متعددة أو نوافذ متعددة)
في المتصفح ، قد تحتاج البرامج النصية إلى التفاعل بين النوافذ المتعددة. تعني النوافذ المتعددة بيئات عالمية متعددة ، والبيئات العالمية المختلفة لها كائنات عالمية مختلفة ، وبالتالي وجود منشآت مختلفة من النوع المدمج. هذا قد يسبب بعض المشاكل. على سبيل المثال ، سيعود التعبير [] extureof window.frames [0] .ray كاذبة لأن Array.Prototype! == window.frames [0] .ray.array.prototype ، لذلك يجب عليك استخدام Array.ISarray (myobj) أو Object.prototype.toString.Call (myobj) === "
مثال
الاستخدام العام لمثيلو هو تحديد ما إذا كان A من النوع ب:
console.log (true extomof boolean) ؛ // false console.log (رقم جديد (1) رقم مثيل) ؛ // حقيقي
يمكن أيضًا تحديد نوع الوالد:
دالة الأب () {} دالة child () {} child.prototype = new boad () ؛ var a = new child () ؛ console.log (مثيل child) ؛ // trueconsole.log (مثيل الأب) ؛ // حقيقييرث مُنشئ الطفل من الأب. لا شك أن الحالة "أ" تم بناءها من قبل الطفل ، ولكن لماذا هو أيضًا مثال على الأب؟ في الواقع ، يمكن وصف نواة مشغل مثيل OF مع الكود التالي:
وظيفة تحقق (a ، b) {بينما a = a .__ proto__ ؛ } return false ؛} function foo () {} console.log (Object extryof object === check (object ، object)) ؛ // true console.log (function functionof function === check (function ، function)) ؛ // true console.log (number extryof number === check (number ، number)) ؛ // true console.log (سلسلة stringof string === check (سلسلة ، سلسلة)) ؛ // true console.log (function functionof object === check (function ، object)) ؛ // true console.log (foo extryof function === check (foo ، function)) ؛ // true console.log (foo easuleof foo === check (foo ، foo)) ؛ // true console.log (foo easuleof foo === check (foo ، foo)) ؛ // true console.log (foo easuleof foo === check (foo ، foo)) ؛ // حقيقيببساطة ، إذا كان A هو مثيل لـ B ، فعندئذ يمكن بالتأكيد استخدام الأساليب والخصائص المحددة في النموذج الأولي لـ B. بعد ذلك ، في الكود ، فهذا يعني أن هناك كائنات ذات نفس القيمة في سلسلة النموذج الأولي مع النموذج B.Prototype ، لذلك فقط اتبع سلسلة النموذج الأولي من A إلى طبقة البحث حسب الطبقة.
تجدر الإشارة أيضًا إلى أن رقم السلسلة المنطقية والوظائف هي وظائف ، ويتم إنشاء الوظائف بشكل موحد من الوظيفة. إنها مثل أي وظيفة بسيطة ، ويمكنهم استخدام خصائص النموذج الأولي على الوظيفة:
function.prototype.a = 10 ؛ console.log (string.a) ؛ // 10
أخيرًا ، دعنا نتحدث بإيجاز عن أول سؤالين.
// من أجل راحة التعبير ، قم أولاً بتمييز التعبير الأيسر ودالة التعبير اليمنى = الدالة ، وظيفة = دالة ؛ // أدناه يتم استنتاجها تدريجياً وفقًا للمواصفات o = functionr.prototype = function.prototype l = functionl .__ proto__ = function.prototype // first justice o == l // return true // for the rightence of exprence of expression ، أولاً تمييز التعبير الأيسر والتعبير الصحيح stringl = stringr = string ؛ // أدناه يتم استخلاص تدريجياً وفقًا للمواصفات o = stringr.prototype = string.prototype l = stringl .__ proto__ = function.prototype // أول مرة قضاة O! = l // loops مرة أخرى للعثور على الوقت الذي لا يزال لديه __proto y l = string. __proto__ l = string.prototype .__ proto__ = null // the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the