يجب أن تكون JavaScript واحدة من اللغات الأكثر شعبية من الطحالب. لقد كنت ألعب مع بعض الأشياء المثيرة للاهتمام على الواجهة الأمامية ، لكنني وجدت أنني لم أتقن هذه اللغة جيدًا. كنت مهملًا بعض الشيء ، لذلك أردت الاستفادة من الوقت الذي لديّ وقت لإضافة بعض الأشياء المفقودة.
هذا الربط الخفي
في البداية ، كان هذا شيئًا كنت مرتبكًا عنه ، لكن عندما رأيته لأول مرة ، لم أفهم. ثم ، في المواقف المماثلة ، يمكن حل نفس المشكلة بطرق مماثلة. لذلك حاولت فرز المعرفة في ذلك لسهولة البحث.
هذا خطأ في تصميم لغة JavaScript ، ولكن يبدو أن هذا الخطأ أمر لا مفر منه ، والوظائف هي كائنات ، والمصفوفات هي كائنات ، وما إلى ذلك.
نسخة الكود كما يلي:
وظيفة إضافة (A ، B) {return a+b}
var sum = add (3،4) ؛
console.log (sum) ؛ // مجموع = 7
في هذا الوقت ، تكون نتيجة المبلغ 7.
نسخة الكود كما يلي:
> typeof إضافة
> "الرقم"
كما ترون هنا ، فإن نوع الإضافة هو قيمة رقمية.
عند استدعاء وظيفة في هذا الوضع ، يرتبط هذا بمتغير عالمي.
هذا هو ، في البيئة الحالية ، يمكننا استدعاء هذا بهذه الطريقة
نسخة الكود كما يلي:
this.add (3،4)
هذا هو الربط الضمني لهذا ، وسيكون هذا ملزما بطرق مختلفة.
نسخة الكود كما يلي:
var hello = function () {
إرجاع "مرحبا" ، + this.name ؛
} ؛
name = 'this' ؛
console.log (hello ()) ؛
ثم سنحصل على مرحبا ، هذا. ومتى
نسخة الكود كما يلي:
var hello = function () {
إرجاع "مرحبا" ، + this.name ؛
} ؛
var user = {
مرحبا: مرحبا ،
الاسم: 'phodal' ،
} ؛
console.log (user.hello ()) ؛
في هذا الوقت ، يشير Hello in User إلى وظيفة Hello ، وفي فهمنا ، كيف يكون هذا ممكنًا؟ لذلك هو خطأ.
إذا حددنا متغيرًا في هذه الطريقة وقمنا بتعيين هذه القيمة لها ، فيمكن للوظيفة الداخلية الوصول إلى هذا من خلال هذا المتغير.
var that = هذا
لذلك عندما يكون الموقف أكثر تعقيدًا قليلاً ، نحتاج إلى استخدام:
نسخة الكود كما يلي:
ضريبة القيمة المضافة = هذا ؛
نصائح:
1. يتم تحديد نطاق هذا المتغير دائمًا من خلال أقرب وظيفة مغلقة.
2. استخدم متغيرًا محليًا (مثلي ، ذاتي ، ذلك) لإتاحة هذا الربط داخليًا.
مثال بسيط:
نسخة الكود كما يلي:
var m = function () {
this.name = "m" ؛
} ؛
var mm = function () {
z = new m () ؛
this.name = "mm" ؛
Z.PrintName = function () {
console.log (this.name) ؛
} ؛
إرجاع Z.PrintName () ؛
} ؛
var mm = new mm ؛
في هذا الوقت ، يشير هذا إلى وظيفة M ، وهي MM نفسها. إذا أزلنا هذا من M ، فإن العائد غير محدد. لذلك نخلق اسم مستعار للنطاق الحالي لذلك ، مثل ذلك أو الذات ، وما إلى ذلك:
نسخة الكود كما يلي:
var mm = function () {
z = new m () ؛
this.name = "mm" ؛
var self = this ؛
Z.PrintName = function () {
console.log (self.name) ؛
} ؛
إرجاع Z.PrintName () ؛
} ؛
بهذه الطريقة يمكنك إرجاع مم. بالإضافة إلى ذلك ، يمكن استخدام طريقة ربط وظيفة رد الاتصال في ES5.
نسخة الكود كما يلي:
var mm = function () {
z = new m () ؛
this.name = "mm" ؛
Z.PrintName = function () {
console.log (this.name) ؛
} .bind (هذا) ؛
إرجاع Z.PrintName () ؛
} ؛
يمكن أن يربط BIND طرق للمستقبل.
آخر
مرحبا آخر ، عالم
لقد واجهت طباعة ('Hello') ('World') عن طريق الصدفة ، ثم أنتجت "Hello ، World".
يبدو أن ما يسمى الوظائف ذات الترتيب العالي مفيدة للغاية. إذا كنت مهتمًا ، يمكنك التحقق من المقالة التالية.