قبل ذكر المفاهيم المذكورة أعلاه، أريد أولاً أن أتحدث عن المعلمات الضمنية للوظائف في JavaScript: الوسيطات
Arguments
يمثل هذا الكائن معلمات الوظيفة التي يتم تنفيذها والوظيفة التي تستدعيها.
[وظيفة.]الوسائط[ن]
وظيفة المعلمة: الخيارات. اسم كائن الوظيفة الذي يتم تنفيذه حاليًا. ن: خيار. الفهرس المستند إلى 0 لقيمة المعلمة المطلوب تمريرها إلى كائن الوظيفة.
الوصف
هي كائن مخفي يتم إنشاؤه بالإضافة إلى المعلمات المحددة عند استدعاء دالة. الوسيطات عبارة عن كائن يشبه المصفوفة ولكنه ليس مصفوفة، ويقال إنها تشبه المصفوفة لأنها تحتوي على نفس خصائص وطرق الوصول التي يمكن الوصول إليها من خلال الوسيطات. n]، وله طول سمة طول الصفيف. أيضًا، يقوم كائن الوسيطات بتخزين المعلمات التي تم تمريرها بالفعل إلى الوظيفة، ولا يقتصر على قائمة المعلمات المحددة بواسطة إعلان الوظيفة، ولا يمكن إنشاء كائن الوسيطات بشكل صريح. كائن الوسائط متاح فقط في بداية الوظيفة. يوضح المثال التالي تفاصيل هذه الخصائص:
// استخدام كائن الوسائط.
وظيفة أرجتيست (أ، ب) {
var i, s = "وظيفة ArgTest متوقعة";
var numargs = الوسيطة. الطول؛ // احصل على قيمة الوسيطة التي تم تمريرها.
var expargs = ArgTest.length; // احصل على قيمة المعلمة المتوقعة.
إذا (expargs <2)
s += expargs + "argument. ";
آخر
s += expargs + "arguments. ";
إذا (الأرقام <2)
s += numargs + "تم تمريره.";
آخر
s += numargs + "تم تمريرها.";
ق += "nn"
for (i =0; i < numargs; i++){ // احصل على محتوى المعلمة.
s += " Arg " + i + " = " +حجج[i] + "n";
}
return(s); // إرجاع قائمة المعلمات.
}
تمت إضافة رمز هنا يوضح أن الوسائط ليست مصفوفة (فئة الصفيف):
Array.prototype.selfvalue = 1;
تنبيه (مصفوفة جديدة ().selfvalue)؛
اختبار الدالة () {
تنبيه (arguments.selfvalue)؛
}
قم بتشغيل التعليمات البرمجية وستجد أن التنبيه الأول يعرض 1، مما يعني أن كائن الصفيف لديه سمة ذات قيمة ذاتية بقيمة 1. عند استدعاء الدالة testAguments، ستجد أنه تم عرض "غير محدد"، مما يشير إلى ذلك وهي ليست سمة من سمات الوسائط، أي أن الوسائط ليست كائن صفيف.
المتصل
إرجاع مرجع إلى الوظيفة التي تسمى الوظيفة الحالية.
اسم الوظيفة.المتصل
كائن functionName هو اسم الوظيفة المنفذة.
لاحظ أنه بالنسبة للوظائف، يتم تعريف سمة المتصل فقط عند تنفيذ الوظيفة. إذا تم استدعاء الدالة من المستوى الأعلى، فإن المتصل يحتوي على قيمة خالية. إذا تم استخدام سمة المتصل في سياق سلسلة، فإن النتيجة هي نفس functionName.toString، أي أنه يتم عرض النص المترجم للوظيفة.
يوضح المثال التالي استخدام سمة المتصل:
// caller demo {
وظيفة المتصل التجريبي () {
إذا (callerDemo.caller) {
var a= callerDemo.caller.toString();
تنبيه (أ)؛
} آخر {
تنبيه ("هذه وظيفة عليا")؛
}
}
وظيفة مقبضالمتصل () {
callerDemo();
}
callee
كائن الوظيفة الذي يتم تنفيذه، وهو نص كائن الوظيفة المحدد.
[وظيفة.]الحجج.كالي
معلمة الوظيفة الاختيارية هي اسم كائن الوظيفة الذي يتم تنفيذه حاليًا.
لاحظ أن
القيمة الأولية للسمة المستدعية هي كائن الوظيفة الذي يتم تنفيذه.
تعد سمة callee عضوًا في كائن الوسائط، وهي تمثل مرجعًا لكائن الوظيفة نفسه، وهو مفيد لتكرار الوظائف المجهولة أو لضمان تغليف الوظائف. على سبيل المثال، يحسب المثال التالي بشكل متكرر مجموع الطبيعي الأرقام من 1 إلى ن. هذه الخاصية متاحة فقط عند تنفيذ الوظيفة ذات الصلة. تجدر الإشارة أيضًا إلى أن المستدعى له سمة الطول، والتي تكون في بعض الأحيان أفضل للتحقق. وسيطات.طول هو طول المعلمة الفعلي، ووسيطات.كالي.طول هو طول المعلمة الرسمي، ومن هذا، يمكنك تحديد ما إذا كان طول المعلمة الرسمي متوافقًا مع طول المعلمة الفعلي أثناء المكالمة.
مثال
// يمكن لـ callee طباعة نفسه
وظيفة calleeDemo() {
تنبيه (arguments.callee)؛
}
// يستخدم للتحقق من المعلمات
دالة calleeLengthDemo(arg1, arg2) {
إذا (arguments.length==arguments.callee.length) {
window.alert("تحقق من صحة أطوال المعلمات الرسمية والفعلية!");
يعود؛
} آخر {
تنبيه ("طول المعلمة الفعلي:" +arguments.length)؛
تنبيه ("طول المعلمة الرسمية:" +arguments.callee. length)؛
}
}
// حساب عودي
فار مجموع = وظيفة(ن){
إذا (ن <= 0)
العودة 1؛
آخر
إرجاع n + وسيطات.callee(n - 1)
}
دالة عودية أكثر عمومية:
var sum = function(n){
إذا (1==ن) أرجع 1؛
وإلا قم بإرجاع n + sum (n-1)
عند الاتصال: تنبيه(sum(100));
تحتوي الدالة على مرجع للمجموع نفسه. اسم الدالة هو مجرد اسم متغير. إن استدعاء المبلغ داخل الدالة يعادل استدعاء متغير عام مقارنة جيدة.
التطبيق والاستدعاء
في ربط دالة بكائن آخر للتشغيل، والفرق الوحيد بينهما هو طريقة تعريف المعلمات:
application(thisArg,argArray);
call(thisArg[,arg1,arg2...] ]) أي
أنه سيتم تعيين قيمة thisArg للمؤشر الموجود داخل جميع الوظائف، والذي يمكن أن يحقق الغرض من تشغيل الوظيفة كطريقة لكائن آخر.
تفسير تطبيق
هو أنه إذا لم يكن argArray مصفوفة صالحة أو ليست وسيطات كائن، فإنه سوف يسبب TypeError.
إذا لم يتم توفير argArray أو thisArg، فسيتم استخدام الكائن العمومي كـ thisArg.
ولا يمكن تمرير أية معلمات.
وصف الاستدعاء
تقوم طريقة الاستدعاء بتغيير سياق الكائن للدالة من السياق الأولي إلى الكائن الجديد المحدد بواسطة thisArg.
إذا لم يتم توفير المعلمة thisArg، فسيتم استخدام الكائن العام كـ thisArg.
نصائح ذات صلة:
هناك خدعة أخرى في تطبيق الاستدعاء والتطبيق، أي بعد استخدام الاتصال والتطبيق لتطبيق وظيفة أخرى (فئة). يمكن أيضًا تسمية الطرق أو خصائص وظيفة أخرى (فئة) باسم "الميراث". انظر إلى المثال التالي:
// إثبات الميراث
قاعدة الوظيفة () {
this.member = "dnnsun_Member";
هذه الطريقة = الوظيفة () {
window.alert(this.member);
}
}
تمديد الوظيفة () {
base.call(this);
window.alert(عضو);
window.alert(this.method);
}
كما يتبين من المثال أعلاه، يمكن أن يرث الامتداد أساليب وخصائص القاعدة بعد الاتصال.
بالمناسبة، يتم استخدام تطبيق في النموذج الأولي لإطار عمل JavaScript لإنشاء نمط
يحدد الفئة، ويكون رمز التنفيذ كما يلي:
var Class = {.
إنشاء: وظيفة () {
وظيفة العودة () {
this.initialize.apply(this,حجج);
}
}
}
التحليل: من وجهة نظر الكود، يحتوي هذا الكائن على طريقة واحدة فقط: الإنشاء، والتي تُرجع دالة، أي فئة. ولكن هذا أيضًا هو منشئ الفصل الذي يستدعي التهيئة، وهذه الطريقة هي وظيفة التهيئة المحددة عند إنشاء الفصل. بهذه الطريقة،
يمكنك تنفيذ مثال وضع إنشاء الفصل في النموذج الأولي
:
var Vehicle=Class.create();
مركبة.النموذج الأولي={
التهيئة: الوظيفة (النوع) {
this.type=type;
}
إظهار الذات: وظيفة () {
تنبيه("هذه السيارة"+ this.type);
}
}
فار موتو=مركبة جديدة("موتو");
moto.showSelf();
لمزيد من المعلومات التفصيلية حول النموذج الأولي، يرجى زيارة الموقع الرسمي الخاص به.
http://www.cnblogs.com/sunwangji/archive/2006/08/21/482341.html