قبل الإشارة إلى المفهوم أعلاه ، تريد أولاً التحدث عن المعلمات المخفية للوظيفة في الوظيفة في 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 += "/N/N"
لـ (i = 0 ؛ i <numargs ؛ i ++) {// احصل على محتوى المعلمة.
s + = "arg" + i + "=" + mations [i] + "/n" ؛
}
إرجاع (ق) ؛
}
فيما يلي رمز يوضح أن الحجج ليست صفيفًا (فئة صفيف):
نسخ رمز رمز على النحو التالي:
Array.Prototype.setValue = 1 ؛
تنبيه (صفيف جديد (). القيمة الذاتية) ؛
اختبارات الوظيفة () {
تنبيه (الحجج. SelfValue) ؛
}
ستجد عرض التنبيه الأول 1 ، مما يعني أن كائن الصفيف يحتوي على سمة القيمة الذاتية بقيمة 1. هي ، سمة الوسائط ، أي أن الوسائط ليست كائن صفيف.
المتصل
إرجاع إشارة إلى الوظيفة التي تستدعي الوظيفة الحالية.
FunctionName.Caller
كائن FunctionName هو اسم وظيفة التنفيذ.
يوضح
بالنسبة للوظائف ، يتم تعريف سمة المتصل فقط عند تنفيذ الوظيفة. إذا تم استدعاء الوظيفة من الطبقة العليا ، فإن المتصل يحتوي على NULL. إذا تم استخدام سمة المتصل في سياق السلسلة ، فإن النتيجة هي نفس الدالة.
يوضح المثال التالي استخدام سمة المتصل:
نسخ رمز رمز على النحو التالي:
// 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)
العودة 0 ؛
آخر
return n + edations.callee (n -1)
}
وظائف تكرار أكثر عمومية:
نسخ رمز رمز على النحو التالي:
var sum = function (n) {
إذا (n <= 0)
العودة 0 ؛
آخر
إرجاع n + sum (n-1) ؛
}
في وقت الاتصال: ALERT (SUM (100)) ؛
من بينها ، تحتوي الوظيفة على المبلغ نفسه.
تقدم واتصل
دورهم هو ربط الوظيفة بكائن آخر.
تطبيق (thisarg ، argarray) ؛
Call (thisarg [، arg1 ، arg2 ...]) ؛
وهذا يعني أن كل هذا المؤشر داخل الوظيفة سيتم تعيينه إلى Thisarg ، والذي يمكنه تحقيق الغرض من تشغيل الوظيفة ككائن آخر.
تطبيق تطبيق
إذا لم يكن Argarray صفيفًا فعالًا أو لم يكن كائن وسيطات ، فسيؤدي ذلك إلى حدوث typerror.
بدون أي معلمات من Argarray و Thisarg ، سيتم استخدام الكائن العالمي كـ Thisarg ،
ولا يمكن تمريرها على أي معلمات.
وصف المكالمة
يمكن أن تغير طريقة الاتصال سياق كائن من دالة من السياق الأولي إلى كائن جديد محدد بواسطة ThisArg.
إذا لم يتم توفير معلمات thisarg ، يتم استخدام الكائن العالمي كـ thisarg
المهارات ذات الصلة:
هناك تقنية أخرى في تطبيق المكالمة والتطبيق ، أي بعد استخدام وظيفة أخرى (فئة) مع الاتصال والتطبيق ، فإن الوظيفة الحالية (الفئة) لها طريقة (فئة) أخرى. "الميراث". انظر إلى المثال التالي:
نسخ رمز رمز على النحو التالي:
// المظاهرة الموروثة
دالة قاعدة () {
this.member = "dnnnsun_member" ؛
this.method = function () {
window.alert (this.member) ؛
}
}
وظيفة expedition () {) {
base.call (هذا) ؛
Window.Alert (عضو) ؛
window.alert (this.method) ؛
}
يمكن رؤية الأمثلة المذكورة أعلاه أنه بعد المكالمة ، يمكن أن يرث التمديد طريقة وسمات القاعدة.
بالمناسبة ، استخدم تطبيقًا لإنشاء نموذج محدد في Propro JavaScript Framework.
في الواقع ، الرمز الحالي هو كما يلي:
نسخ رمز رمز على النحو التالي:
فئة var = {
إنشاء: function () {
وظيفة الإرجاع () {
this.initialize.apply (هذا ، الحجج) ؛
}
}
}
التحليل: من الكود ، يحتوي الكائن على طريقة واحدة فقط: إنشاء ، والتي تُرجع وظيفة ، أي فئة. ولكن هذا أيضًا مُنشئ للفئة ، حيث يتم استدعاء التهيئة ، وهذه الطريقة هي وظيفة التهيئة المحددة أثناء إنشاء الفصل. من خلال هذه الطريقة ، يمكنك تنفيذ وضع إنشاء الفصل في النموذج الأولي
مثال:
نسخ رمز رمز على النحو التالي:
VAR مركبة = class.create () ؛
motion.prototype = {
تهيئة: الدالة (النوع) {
this.type = type ؛
}
showself: function () {{)
التنبيه ("هذا هو" جدا "+ this.type) ؛
}
}
var moto = new vene ("moto") ؛
moto.showself () ؛