يوفر JS بعض الكائنات والوظائف والمنشئات المضمنة لنا لبرمجتها، مثل Math وparseInt وObject وArray وما إلى ذلك. هذه كلها مرئية ويمكن استخدامها أثناء البرمجة. على سبيل المثال، يمكنني استخدام كائن جديد أو صفيف جديد.
بعضها غير مرئي ولا يمكن توفيره إلا بواسطة المحرك في ظروف خاصة. غالبًا ما تكون هذه الأنواع من الكائنات ذات وظائف منخفضة. وهنا بعض
1. نوع الحجج
لا يمكن لنوع الوسيطات إنشاء كائناته يدويًا بواسطة المبرمج، أي لا يمكنك إنشاء وسيطات جديدة (). لديها وسيطات كائن واحد فقط
انسخ رمز الكود كما يلي:
وظيفة وظيفة () {
console.log(arguments[0]) // 1
console.log(arguments.length) // 3
}
متعة (1، 2، 3)
يتم إنشاء كائن الوسيطات عند استدعاء الدالة ويكون مرئيًا ومستخدمًا فقط داخل الدالة. يمكنك أن ترى أن الوسائط تشبه إلى حد كبير المصفوفة، ويمكن استرداد العناصر عن طريق الفهرس، ولها أيضًا سمة الطول. لكنها ليست Array ولا تحتوي على بعض أساليب Array مثل Push و Pop وما إلى ذلك. تم تعريف الوسائط في ES5 10.6.
2. الوظيفة التي يتم إرجاعها بواسطة bind مميزة جدًا.
bind هي طريقة جديدة تمت إضافتها بواسطة ES5 إلى Function.prototype ويتم استدعاؤها مباشرة على الوظيفة مثل call/apply. تقوم بإرجاع دالة ذات سياق ومعلمات محددة.
انسخ رمز الكود كما يلي:
وظيفة وظيفة (العمر) {
console.log('الاسم: ' + this.name + '، المهنة: ' + العمر)
}
فار الشخص = {الاسم: 'جون مكارثي'}
var f1 = func.bind(شخص، "عالم كمبيوتر")
f1() // الاسم: جون مكارثي، المهنة: عالم كمبيوتر
يمكنك أن ترى أن الدالة التي تم إرجاعها f1 يتم استدعاؤها باستخدام الأقواس مثل الدالة العادية. كل شيء يعمل بشكل جيد، ولكن الكود التالي سوف يفاجئك
انسخ رمز الكود كما يلي:
وظيفة وظيفة (العمر) {
console.log('الاسم: ' + this.name + '، المهنة: ' + العمر)
}
فار الشخص = {الاسم: 'جون مكارثي'}
var f1 = func.bind(شخص، "عالم كمبيوتر")
console.log(f1.prototype) // غير محدد
بالمقارنة مع الكود أعلاه، لم يتم تنفيذ الجملة الأخيرة f1()، ولكن تمت طباعة f1.prototype ووجد أنها غير محددة.
غريب؟ ألا تحتوي كل وظيفة على سمة نموذج أولي؟ يتم استخدام هذا لتنفيذ وراثة النموذج الأولي. في الواقع، الوظيفة التي يتم إرجاعها بواسطة bind خاصة، ولا تحتوي على نموذج أولي. يتم إنشاء هذه الوظيفة الخاصة بواسطة محرك JS ولا يمكن لمبرمج العميل قياسها مباشرة من خلال إعلان الوظيفة أو الوظيفة.
تم ذكر ذلك بوضوح في المواصفات ES5 15.3.4.5