يتم استخدام عبارة for in لسرد خصائص (أعضاء) الكائن، كما يلي
انسخ رمز الكود كما يلي:
فار أوبج = { الاسم:"جاك"،
الحصول على الاسم: الوظيفة () {إرجاع هذا. الاسم}
};
// اسم الإخراج، getName
ل(فار أتر في أوبج) {
تنبيه (أتر)؛
}
هل لاحظت أنه لا توجد خصائص مضمنة (أو أعضاء مضمنة وخصائص مخفية وخصائص محددة مسبقًا) مثل toString وvalueOf of obj. بمعنى أنه يتم استخدام in لتعداد الأعضاء المعروضين (الأعضاء المخصصين) للكائن.
إذا قمت بتجاوز الخصائص المضمنة، فقم بإعادة كتابة كائن toString أدناه.
انسخ رمز الكود كما يلي:
فار أوبج = {الاسم:"جاك"،
getName:function(){return this.name},
toString:function(){return "أنا جاك."}
}
ل(فار أتر في أوبج) {
تنبيه (أتر)؛
}
ماذا سيكون الناتج؟
1. في IE6/7/8، يكون الأمر نفسه بدون إعادة الكتابة إلى String، ولا يزال يُخرج الاسم وgetName فقط.
2. ضمن IE9/Firefox/Chrome/Opera/Safari، يتم إخراج الاسم وgetName وtoString
إذا قمت بإضافة خصائص/طرق إلى النموذج الأولي المدمج، فسيكون من الممكن أيضًا اجتيازها أثناء الدخول
انسخ رمز الكود كما يلي:
Object.prototype.clone = function() {}
فار أوبج = {
الاسم: "جاك"،
العمر: 33
}
// الاسم والعمر والاستنساخ
لـ (var n في obj) {
تنبيه (ن)
}
تتم إضافة استنساخ الطريقة إلى Object.prototype، وتعرض جميع المتصفحات الاستنساخ عند الدخول.
قد لا يكون هذا مهمًا، لأنه لا يُنصح عمومًا بتوسيع النموذج الأولي للمنشئ المدمج، وهو أحد أسباب تراجع Prototype.js. لا يقوم jQuery وUnderscore بتوسيع النموذج الأولي الذاتي، حيث يثير الأول ضجة حول كائن jQuery، بينما يقوم الأخير ببساطة بتعليق جميع الأساليب تحت الشرطة السفلية.
لكن في بعض الأحيان، لكي نكون متوافقين مع ES5 أو الإصدارات اللاحقة، سنقوم بتوسيع النموذج الأولي للمنشئ المدمج على المتصفحات التي لا تدعم ES5 (IE6/7/8). كل متصفح. على النحو التالي
انسخ رمز الكود كما يلي:
إذا (!Function.prototype.bind) {
Function.prototype.bind = وظيفة(نطاق) {
فار fn = هذا
وظيفة الإرجاع () {
fn.apply(النطاق، الحجج)
}
}
}
وظيفة تحية (الاسم) {
تنبيه (this.greet + '،' + الاسم)
}
لـ (var n في الترحيب) {
تنبيه (ن)
}
ترتبط مخرجات IE6/7/8، لكن المتصفحات الأخرى لا تفعل ذلك. نظرًا لأن bind مدعوم أصلاً في المتصفحات الحديثة، ولأنه غير متوفر، فإن IE6/7/8 يضيف ربطًا إلى Function.prototype.
لتلخيص ذلك: في التصميم عبر المتصفحات، لا يمكننا الاعتماد على for للحصول على أسماء أعضاء الكائن، ونستخدم بشكل عام hasOwnProperty للحكم.