لقد كان فهمي لهذا دائمًا فقط حول القدرة على استخدامه ومعرفته ، لكنني لم أتحقق في جوهره. هذه المرة ، لدي فهم عميق مع "JavaScript The Good Parts". (يمكن رؤية كل تصحيح الأخطاء في وحدة التحكم ، مفتاح المستعرض F12)
دعونا نلقي نظرة على هذا معًا.
عندما نعلن دالة ، يكون لكل وظيفة معلمتين إضافيتين (معلمات رسمية) محددة ، واحدة هي هذه والآخر هو وسيط. الوسيطات هي المعلمات المقبولة فعليًا من خلال الوظيفة ، وهي مجموعة من الفئات. سأقدم فقط مقدمة موجزة للحجج ، وسنركز على هذا المؤشر.
في التحول الموجهة للكائنات ، هذا أمر مهم للغاية ، وتعتمد قيمته على نمط المكالمة. في JavaScript ، هناك 4 أنماط استدعاء في المجموع: أنماط استدعاء الطريقة ، وأنماط استدعاء الوظائف ، وأنماط استدعاء المنشئ ، وتطبيق أنماط الاتصال.
طريقة الاتصال طريقة
عندما تكون الوظيفة سمة ككائن ، فإننا عادة ما نسمي هذه الوظيفة طريقة لهذا الكائن. عندما يتم استدعاء هذه الطريقة ، يشير هذا إلى الكائن الذي تنتمي إليه الطريقة.
نسخة الكود كما يلي:
<script type = "text/javaScript">
var people = {
الاسم: "Yika" ،
sayname: function () {
console.log (this.name) ؛ // "Yika"
// كان هذا ملزماً لكائن الناس
}
}
people.sayname () ؛
</script>
كما هو موضح في الكستناء ، هذا يشير إلى كائن SayName. هذه الطريقة للحصول على سياق الكائن من خلال هذا هو طريقة عامة. (طريقة publice)
وضع استدعاء الوظيفة
عند استدعاء الوظيفة ، ليست طريقة على كائن ما ، فهي تسمى كدالة.
ستشير مكالمة النمط هذه إلى كائن النافذة ، حتى لو تم استدعاء هذه الوظيفة في وظيفة خارجية ، فلننظر إليها.
نسخة الكود كما يلي:
<script type = "text/javaScript">
var name = "window-yika" ؛
var people = {
الاسم: "شعب ييكا" ،
الطالب: وظيفة () {
console.log (هذا) ؛ // هذا يربط الكائن الناس هنا
وظيفة sayname () {
var name = "sayname-yika" ؛
console.log (this.name) ؛ // window-yika
// حتى لو كانت وظيفة sayname نفسها والكائن الذي يوجد به هو قيمة الاسم ، فإن هذا يشير إلى النافذة
} ؛
sayname () ؛
}
}
people.student () ؛
</script>
من هذا المنظور ، هل تعرف كيفية حل "خطأ التصميم" JavaScript.
نعم ، فقط تخزين هذا في وظيفة الطالب ، أي السطر 6. ثم نقل هذا إلى وظيفة sayname من خلال المتغيرات لحلها!
نسخة الكود كما يلي:
var people = {
الاسم: "شعب ييكا" ،
الطالب: وظيفة () {
var self = this ؛ // ذاكرة التخزين المؤقت هذا
وظيفة sayname () {
var name = "sayname-yika" ؛
console.log (self.name) ؛ // "People-Yika" ، في هذا الوقت ، يشير الذات إلى كائن الناس
} ؛
sayname () ؛
}
}
وضع استدعاء مُنشئ
عندما تتحدث JavaScript عن المُنشئين ، ستعتقد: "اسم الوظيفة يتمتع به الرسملة! استخدم المشغل الجديد عند الاتصال!" من السهل فهم رسملة اسم الوظيفة ، من أجل توحيد تسمية المنشئ. ولكن هل سبق لك أن بحثت عن سبب حاجة إلى استخدام جديد؟ إذا اتصلت بوظيفة جديدة مع جديدة ، فإن خلفية الوظيفة ستنشئ كائنًا جديدًا يشير إلى النموذج الأولي للوظيفة ، وهذا أيضًا مرتبط بالكائن الجديد. JavaScript هي لغة تستند إلى ميراث النموذج الأولي. يمكن للطلاب الذين ليسوا واضحين للغاية بشأن النماذج الأولية التحقق من المعلومات بأنفسهم. أركز على هذا.
دعونا أولاً نلقي نظرة على شكل المُنشئ عمومًا.
نسخة الكود كما يلي:
<script type = "text/javaScript">
وظيفة الناس (الاسم) {
this.name = name ؛ // يشير هذا هنا إلى الكائن الجديد Yika بعد تسميته بـ New
this.sayname = function () {
console.log (this.name) ؛ // الإخراج
}
}
var yika = أشخاص جدد ("Yika") ؛
yika.sayname () ؛ // الإخراج "Yika" لأنه يتم الحصول على Yika من خلال مكالمة جديدة ، وهذا مرتبط بكائن Yika.
</script>
للوهلة الأولى ، يبدو أنه ليس من السهل فهمها. لماذا هذه النقطة إلى النافذة في الوظيفة الآن ، والآن يمكنك الإشارة إلى وظيفة الأشخاص بدون ذاكرة التخزين المؤقت؟
لا يهم. ألم تقل فقط أن الوظيفة ستفعل "افعل الأشياء السيئة" سرا من خلال الاتصال الجديد؟ دعونا نرى ما فعلته بالضبط.
نسخة الكود كما يلي:
<script type = "text/javaScript">
وظيفة الناس (الاسم) {
var that = {} ؛ // شيء سيء واحد: قم بإنشاء كائن بنفسك
that.name = name ؛
that.sayname = function () {
console.log (that.name) ؛
} ؛
إعادة ذلك ؛ // سيئ الشيء 2 ، سوف تغير سلوك الإرجاع ، وإرجاع الكائن الذي تم إنشاؤه للتو
}
var yika = people ("Yika") ؛ // يمكن حذف جديد هنا وتقليد المكالمة إلى المشغل الجديد
yika.sayname () ؛ // الإخراج "Yika" كما هو الحال الآن
</script>
يمكنك أن ترى بوضوح بهذه الطريقة. لن يقوم الجديد بإنشاء كائن فحسب ، بل سيعود أيضًا إلى الكائن تلقائيًا ، بحيث يشير هذا بشكل طبيعي إلى هذا الكائن الجديد.
تذكر أن تستخدم New لاتصال المُنشئ ، وإلا فلن يكون هناك تحذير إذا حدث خطأ ما ، وما زالت جميع اتفاقيات رأس المال ضرورية للغاية.
تطبيق وضع الاتصال
تتيح لنا طريقة التطبيق إنشاء مجموعة من المعلمات التي تم تمريرها إلى وظيفة الاتصال ، والتي تتيح لنا أيضًا تغيير هذه القيمة.
function.apply (هذه القيمة المربوطة ، صفيف المعلمة الوسائط)
هناك الكثير من الأشياء التي يمكنني قولها ، سأعطيك فقط كستناء هنا لمساعدتك على فهم:
نسخة الكود كما يلي:
<script type = "text/javaScript">
وظيفة الناس (الاسم) {
this.name = name ؛
this.sayname = function () {
console.log (this.name) ؛ // sayname method تنتمي إلى مُنشئ الناس
}
}
وظيفة الطالب (الاسم) {
people.apply (هذا ، الحجج) ؛ // طريقة التكامل المتمثلة في اقتراض مُنشئوها هي استدعاء مُنشئو الأشخاص من خلال التقدم في مُنشئ الطلاب وتغيير هذه القيمة للأشخاص
// بهذه الطريقة ، في كل مرة يتم فيها إنشاء مثيل للطالب ، سيتم استدعاء مُنشئ الأشخاص
}
var student = new student ("Yika") ؛
student.sayname () ؛ // الإخراج "Yika"
</script>
يمكننا بسهولة تعديل هذا الكائن الملزم من الوظيفة من خلال التطبيق. استدعاء مماثل للتطبيق له أيضا نفس التأثير. يمكن للطلاب المهتمين البحث وتعلمه بأنفسهم.
حسنًا ، لقد انتهينا أخيرًا من تغيير أوضاع الاتصال الأربعة لهذا. سيتم استخدام وضع استدعاء الطريقة ووضع استدعاء المنشئ أكثر ، وسيكون أكثر أهمية. بالنسبة لوضع استدعاء الوظيفة ، يجب أن نتعلم كيفية تجنب الفخاخ فيه.
إذا كان هناك أي خطأ ، فيرجى الإبلاغ عن ذلك في الوقت المناسب وسأقوم بتصحيحه في أقرب وقت ممكن لمنع تضليل الآخرين. شكرًا لك!