قبل الإشارة إلى المفهوم أعلاه ، تريد أولاً التحدث عن المعلمات المخفية للوظيفة في الوظيفة في JavaScript:
الحجج
تمثل الوسائط المعلمات التي يتم تنفيذها ووظيفة استدعاء وظيفتها. [وظيفة.] الوسائط [n] المعلمة
الوظيفة: الخيارات. يتم تنفيذ اسم كائن الوظيفة حاليًا.
N: الخيارات. لتمرير فهرس قيمة المعلمة من 0 إلى كائن الوظيفة. إنه يوضح أن الجثث هو كائن مخفي تم إنشاؤه بالإضافة إلى المعلمة المحددة عندما يتم استدعاء الوظيفة. الحجج هي كائن مشابه لصفيف ولكن ليس صفيفًا. لديه طول السمة طول الصفيف. هناك أيضًا المعلمة التي يخزن كائن الوسائط الوظيفة التي يتم تمريرها فعليًا إلى الوظيفة ، والتي لا تقتصر على قائمة المعلمات المحددة بواسطة البيان الوظيفي ، ولا يمكن إنشاؤها بشكل صريح لإنشاء كائن وسيطات. يمكن أن يكون كائن الوسائط متاحًا فقط في بداية الوظيفة.
يشرح المثال التالي هذه الخصائص بالتفصيل
نسخ رمز رمز على النحو التالي:
// استخدام كائن الحجج
وظيفة argtest (a ، b) {{
var i ، s = "وظيفة argtest المتوقعة" ؛
var numargs = expuments.length ؛
var expargs = argtest.length ؛
إذا (expargs <2)
s + = expargs + "الوسيطة." ؛
آخر
S + = expargs + "الوسائط." ؛؛
إذا (numargs <2)
S + = numargs + "تم تمرير." ؛
آخر
S + = numargs + "لقد مررنا." ؛
S += ""
لـ (i = 0 ؛ i <numargs ؛ i ++) {// احصل على محتوى المعلمة.
s + = "arg" + i + "=" + encuments + "" "" ؛
}
إرجاع (ق) ؛
}
فيما يلي رمز يوضح أن الحجج ليست صفيفًا (فئة صفيف):
نسخ رمز رمز على النحو التالي:
Array.Prototype.setValue = 1 ؛
تنبيه (صفيف جديد (). القيمة الذاتية) ؛
اختبارات الوظيفة () {
تنبيه (الحجج. SelfValue) ؛
}
ستجد عرض التنبيه الأول 1 ، مما يعني أن كائن الصفيف يحتوي على سمة القيمة الذاتية بقيمة 1. هي ، سمة الوسائط ، أي أن الوسائط ليست كائن صفيف.
أضف طريقة بسيطة لإضافة هنا: ALERT (MINCUMENTS مثيل ARRAY) ؛
تنبيه (وسيطات مثيل كائن) ؛
المتصل
إرجاع إشارة إلى الوظيفة التي تستدعي الوظيفة الحالية.
FunctionName.Caller
كائن FunctionName هو اسم وظيفة التنفيذ.
يوضح
بالنسبة للوظائف ، يتم تعريف سمة المتصل فقط عند تنفيذ الوظيفة. إذا تم استدعاء الوظيفة من الطبقة العليا ، فإن المتصل يحتوي على NULL. إذا تم استخدام سمة المتصل في سياق السلسلة ، فإن النتيجة هي نفس الدالة.
ملاحظة: يمكن أن يدرك function.toString () وظيفة مضادة للضغط للوظيفة.
يوضح المثال التالي استخدام سمة المتصل:
نسخ رمز رمز على النحو التالي:
// Caller Demo {
وظيفة calldemo () {
if (callerdemo.caller) {
var a = callerdemo.caller.toString () ؛
تنبيه (أ) ؛
} آخر {
تنبيه ("هذه وظيفة أعلى") ؛
}
}
وظيفة HandleCaller () {
callerdemo () ؛
}
كالي
إرجاع نص كائن الوظيفة الذي يتم تنفيذه ، نص كائن الوظيفة المحدد. [الوظيفة.] الوسيطات. المعلمة الاختيارية هي اسم كائن الوظيفة الذي يتم تنفيذه حاليًا. اشرح أن القيمة الأولية لسمة Callee هي كائن الوظيفة الذي يتم تنفيذه. سمة Callee هي عضو في كائن الوسائط ، مما يشير إلى الإشارة إلى كائن الوظيفة نفسه ، والذي يفضي إلى تكرار الوظيفة المجهولة أو تغليف الوظيفة. تتوفر هذه السمة فقط عند تنفيذ وظيفة الارتباط. تجدر الإشارة إلى أن Callee لديه سمة طول. الوسائط. الطول هو طول معلمة صلبة ، والوسائط.
مثال مثالي
نسخ رمز رمز على النحو التالي:
// يمكن لطباعة نفسها
وظيفة تسمى {) {
تنبيه (الحجج. callee) ؛
}
// تستخدم للتحقق من المعلمات
وظيفة calleelellengthdemo (Arg1 ، Arg2) {{
if (ediuments.length == ediuments.callee.length) {
Window.Alert ("التحقق من الجينسنغ وطول المعلمة الصلبة صحيح!") ؛
يعود؛
} آخر {
تنبيه ("طول المعلمة الصلبة:" +وسيطات. الطول) ؛
التنبيه ("" الشكل "المتراجع: +enduments.callee.length) ؛
}
}
// حساب العودية
var sum = function (n) {
إذا (n <= 0)
العودة 1 ؛
آخر
return n + edations.callee (n -1)
} مقارنة بالوظائف العودية العامة: var sum = function (n) {
إذا (1 == n) العودة 1 ؛
عودة أخرى n + sum (n-1) ؛
}
في وقت الاتصال: ALERT (SUM (100)) ؛
من بينها ، تحتوي الوظيفة على المبلغ نفسه.
تقدم واتصل
دورهم هو ربط الوظيفة بكائن آخر.
تطبيق (thisarg ، argarray) ؛
Call (thisarg [، arg1 ، arg2 ...]) ؛
أي أن هذا المؤشر داخل جميع الوظائف سيتم تعيينه إلى Thisarg ، والذي يمكن أن يدرك الغرض من الغرض من استخدام الوظيفة كطريقة أخرى.
إذا لم يتم توفير أي معلمة من Argarray و Thisarg ، فسيتم استخدام الكائن العالمي كإجراء هذا ولا يمكن تمريره على أي معلمات. يمكن أن تغير طريقة الاتصال الوصف الخاصة بالمكالمة سياق كائن لوظيفة من السياق الأولي إلى كائن جديد محدده ThisArg.
إذا لم تقدم معلمة thisarg ، فسيتم استخدام الكائن العالمي كأسلوب مرتبط بـ Thisarg: بعد تطبيق المكالمة والتطبيق ، هناك تقنية أخرى في ذلك. الوظيفة الحالية (الفئة).
انظر إلى المثال التالي:
نسخ رمز رمز على النحو التالي:
// المظاهرة الموروثة
دالة قاعدة () {
this.member = "dnnnsun_member" ؛
this.method = function () {
window.alert (this.member) ؛
}
}
وظيفة expedition () {) {
base.call (هذا) ؛
Window.Alert (عضو) ؛
window.alert (this.method) ؛
}
يمكن رؤية الأمثلة المذكورة أعلاه أنه بعد المكالمة ، يمكن أن يرث التمديد طريقة وسمات القاعدة. بالمناسبة ، استخدم لإنشاء نموذج تعريف في النموذج الأولي JavaScript.
نسخ رمز رمز على النحو التالي:
فئة var = {
إنشاء: function () {
وظيفة الإرجاع () {
this.initialize.apply (هذا ، الحجج) ؛
}
}
}
التحليل: من الكود ، يحتوي الكائن على طريقة واحدة فقط: إنشاء ، والتي تُرجع وظيفة ، أي فئة. ولكن هذا أيضًا مُنشئ للفئة ، حيث يتم استدعاء التهيئة ، وهذه الطريقة هي وظيفة التهيئة المحددة أثناء إنشاء الفصل. من خلال هذه الطريقة ، يمكن تنفيذ أمثلة إنشاء الفصل في النموذج الأولي:
نسخ رمز رمز على النحو التالي:
VAR مركبة = class.create () ؛
motion.prototype = {
تهيئة: الدالة (النوع) {
this.type = type ؛
}
showself: function () {{)
التنبيه ("هذا هو" جدا "+ this.type) ؛
}
} var moto = سيارة جديدة ("moto") ؛
moto.showself () ؛