الكلمات المفتاحية: الحجج، المستدعي، المتصل
الوسائط: تمثل المعلمات التي تم تمريرها إلى الوظيفة
المستدعي: بيان يمثل الوظائف والهيئات الوظيفية
المتصل: يمثل الوظيفة التي تستدعي الوظيفة
الحجج
يمثل هذا الكائن الوظيفة التي يتم تنفيذها ومعلمات الوظيفة التي تستدعيها.
المتصل
إرجاع مرجع إلى الوظيفة التي تسمى الوظيفة الحالية.
اسم الوظيفة.المتصل
كائن functionName هو اسم الوظيفة التي يتم تنفيذها.
يوضح
بالنسبة للوظائف، يتم تعريف سمة المتصل فقط عند تنفيذ الوظيفة. إذا تم استدعاء الدالة من المستوى الأعلى، فإن المتصل يحتوي على قيمة خالية. إذا تم استخدام سمة المتصل في سياق سلسلة، فإن النتيجة هي نفس functionName.toString، أي أنه يتم عرض النص المترجم للوظيفة.
كالي
إرجاع كائن الوظيفة الذي يتم تنفيذه، وهو نص كائن الوظيفة المحدد.
[وظيفة.]الحجج.كالي
معلمة الوظيفة الاختيارية هي اسم كائن الوظيفة الذي يتم تنفيذه حاليًا.
يوضح
القيمة الأولية لسمة المستدعي هي كائن الوظيفة الذي يتم تنفيذه.
تعد سمة callee عضوًا في كائن الوسائط، وهي تمثل مرجعًا لكائن الوظيفة نفسه، وهو مفيد لتكرار الوظائف المجهولة أو لضمان تغليف الوظائف. على سبيل المثال، يحسب المثال التالي بشكل متكرر مجموع الطبيعي الأرقام من 1 إلى ن. هذه الخاصية متاحة فقط عند تنفيذ الوظيفة ذات الصلة. تجدر الإشارة أيضًا إلى أن المستدعى له سمة الطول، والتي تكون في بعض الأحيان أفضل للتحقق. الوسيطات.الطول هو طول المعلمة الفعلي، والحجج.كالي.طول هو طول المعلمة الرسمي، ومن هذا، يمكنك تحديد ما إذا كان طول المعلمة الرسمي متوافقًا مع طول المعلمة الفعلي عند الاتصال.
انسخ رمز الكود كما يلي:
<script type='text/javascript'>
اختبار الوظيفة (س، ص، ض)
{
تنبيه("طول المعلمة الفعلي:"+arguments.length);
تنبيه("طول المعلمة الرسمية:"+arguments.callee.length);
تنبيه("طول المعلمة الرسمية:"+test.length);
تنبيه (الوسائط [0])
تنبيه (اختبار [0]) // غير محدد ليس له مثل هذا الاستخدام
}
//اختبار(1,2,3);
اختبار (1،2،3،4)؛
/*
* الوسائط ليست مصفوفة (فئة الصفيف)
*/
Array.prototype.selfvalue = 1;
اختبار الدالة () {
تنبيه("arguments.selfvalue="+arguments.selfvalue);
}
تنبيه ("Array.sefvalue = "+new Array ().selfvalue)؛
testAguments();
/**/ /*
* يوضح سمة المتصل للوظيفة.
* الوصف: (الوظيفة الحالية).المتصل: يقوم بإرجاع مرجع إلى الوظيفة التي تسمى الوظيفة الحالية
*/
وظيفة المتصل التجريبي () {
إذا (callerDemo.caller) {
var a = callerDemo.caller.arguments[ 0 ];
تنبيه (أ)؛
} آخر {
تنبيه ("هذه وظيفة عليا")؛
}
}
وظيفة مقبضالمتصل () {
callerDemo();
}
callerDemo();
HandleCaller("المعلمة 1", "المعلمة 2");
/**/ /*
* يوضح سمة المستدعي للوظيفة.
* الوصف: الوسيطات.callee: القيمة الأولية هي كائن الوظيفة الذي يتم تنفيذه، والمستخدم للوظائف المجهولة
*/
وظيفة calleeDemo() {
تنبيه (arguments.callee)؛
}
calleeDemo();
(function(arg0,arg1){alert("عدد الأشكال هو:"+arguments.callee.length)})();
/**/ /*
* إظهار استخدام وظائف التطبيق والاتصال
* ملاحظة: الوظيفة هي ربط الوظيفة بكائن آخر لتشغيله، والفرق الوحيد بين الاثنين هو طريقة تحديد المعلمات:
* تطبيق(thisArg,argArray);
* استدعاء(thisArg[,arg1,arg2…] ]);
* أي أنه سيتم تعيين هذا المؤشر داخل جميع الوظائف thisArg
*/
دالة الكائن أ () {
تنبيه ("تنفيذ الكائن أ ()")؛
تنبيه(الوسائط[0]);
هذا .hit = الوظيفة (msg) {alert(msg)}
هذا .info = "أنا من ObjectA"
}
دالة كائنب () {
تنبيه("تنفيذ ObjectB()");
// اتصل بطريقة ObjectA ()، وسيتم استبدال كل هذا في مُنشئ ObjectA بهذا في ObjectB.
ObjectA.apply( this ,arguments); // ObjectA.call(this);
تنبيه (هذه المعلومات)؛
}
ObjectB('المعلمة 0');
قيمة فار = "المتغير العام"؛
وظيفة الكائن () {
this .value = "الكائن!";
}
الدالة Fun1() {
تنبيه (هذه القيمة)؛
}
Fun1();
Fun1.apply(window);
Fun1.apply(new Obj());
</script>