كيفية البدء بسرعة مع VUE3.0: تعلم
في المقدمات المختلفة التي رأيناها حول كيفية تحديد طريقة الإشارة لهذا، تعتبر الجملة "هذا يشير في النهاية إلى الكائن الذي يستدعيه". الأساسية، ولكن في مواجهة نحن نميل إلى الخلط بشأن مجموعة متنوعة من المواقف. وبناء على فهمي للمواقف المختلفة، طرحت جملة : "الأسهم والتوقيت والهيكل، انظر إلى المواقف الخاصة، انظر إلى رقم النقطة للمكالمات العادية، ولا تنظر إلى المقدمة للنقاط اللاحقة، ثم احكم على المبدأ الأقرب، وآخر ما تبقى هو النافذة." .
وظيفة السهم
وظيفة السهم نفسها لا تحتوي على هذا، لذلك لا يوجد هذا التغيير، فهي تلتقط هذا الخارجي باستخدام
var name = "windowsName"; فار أ = { الاسم: "الكرز"، الجبهة الوطنية () { setTimeout(()=>{ console.log(this.name); },0) } } a.fn() // تحليل الكرز
: أولاً، يستدعي الكائن a وظيفة fn، لذلك يشير هذا الدالة fn إلى الكائن a، ثم يلتقط السهم هذا الخارجي، ثم ليس هذا في setTimeout، ولكن هذا من وظيفة fn، لذا في النهاية، احصل على الاسم في الكائن أ.
يشيرالمؤقت
الخاص بوظيفة رد الاتصال داخل وظيفة التأخير إلى نافذة الكائن العامة
var name = "windowsName"; فار أ = { الاسم: "الكرز"، الجبهة الوطنية () { setTimeout(وظيفة (){ console.log(this.name); },0) } } a.fn() //تحليل windowsName
: أولاً، يستدعي الكائن a وظيفة fn، ثم وظيفة رد الاتصال في setTimeout هنا هي وظيفة مجهولة، وهي وظيفة عادية، ثم يشير هذا في الوظيفة المجهولة إلى window
var name = "windowsName"; فار ب={ الاسم: "setTimeoutName" } فار أ = { الاسم: "الكرز"، الجبهة الوطنية () { setTimeout((وظيفة (){ console.log(this.name); }).bind(ب),0) } } a.fn() // تحليل setTimeoutName
: أولاً، يستدعي الكائن a وظيفة fn، ثم وظيفة رد الاتصال في setTimeout هنا هي وظيفة مجهولة، وهي وظيفة عادية، ثم تشير هذه الوظيفة المجهولة إلى النافذة استخدم الرابط لتغيير الوظيفة المجهولة. يشير هذا إلى الكائن b، وبالتالي فإن
مُنشئ
الاسمفي الكائن b يشير أخيرًا إلى كائن المثيل الذي تم إنشاؤه في المُنشئ.
ملاحظة: إذا تم إرجاع كائن في المُنشئ، فلن يكون هناك مثيل جديد الكائن عند إنشائه، ولكن هذا الكائن تم إرجاعه بواسطة
الدالة fn(){ this.age = 37; } var a = new fn(); console.log(a.age);// 37 أ.العمر = 38؛ console.log(fn); // { this.age = 37 } console.log(a.age); // 38
التحليل: هنا نقوم بإنشاء كائن المثيل a من خلال المُنشئ، وهو ما يعادل فتح مكان جديد ونسخ محتويات المُنشئ الوقت، يشير هذا إلى الكائن أ، تعديلنا للمحتوى في الكائن أ لا يؤثر على تمرير
حكم رقم
النقطة المنشئ.
احكم على هذه النقطة واتبع مبدأ القرب
var a = {. العمر: 10، ب: { العمر: 12، الجبهة الوطنية (){ console.log(this.age); } } } abfn(); //12
التحليل: الكائن a يستدعي وظيفة fn للكائن b. هناك نوعان أمام الدالة fn .
ثم الأقرب هو الكائن b، لذا فإن هذه الدالة fn تشير إلى الكائن b آخر شيء تم الحصول عليه هو عمر الكائن
var a = {.
العمر: 10، ب: { العمر: 12، الجبهة الوطنية (){ console.log(this.age);//غير محدد } } } فار ج = { العمر: 20، } فار د = { العمر: 30، } abfn.bind(c).bind(d)(); // 20
التحليل: يستدعي الكائن a الدالة fn للكائن b ثم يستخدم الرابط لتغيير اتجاه هذا في هذا الوقت، يحتوي fn على .
النظر
عن
.
console.log(هذا) // { س: 1 } وظيفة وظيفة () { console.log(هذا) // نافذة } هزار() } ExternalFunc.bind({ x: 1 })()
obj = { وظيفة () { سهم ثابت = () => { console.log(this._name) } وظيفة سهم العودة }, _الاسم: "الكائن"، } obj.func()() //obj func = obj.func func()() //غير محدد obj.func.bind({ _name: "newObj" })()() //newObj obj.func.bind()()() //غير محدد obj.func.bind({ _name: "bindObj" }).apply({ _name: "applyObj" })() //bindObj
استخدم وظائف التطبيق والاتصال والربط لتغيير اتجاه هذا ما ورد أعلاه.
الفرق بين
استدعاء thisArg , [ argsArray]
call(thisArg, arg1, arg2, ...)
يكمن الاختلاف بين وظائف التطبيق والاتصال في المعلمات التي تم تمريرها بعد ذلك في التطبيق عبارة عن مصفوفة، وما يتم تمريره في المكالمة هو
bind(thisArg[, arg1[, arg2[, ...]]])()
،
this
bind()
المعلمات المتبقية كمعلمات للوظيفة الجديدة لاستخدامها عند الاتصال.! شكرا للجميع على القراءة!
المواد المرجعية
https://juejin.cn/post/6946021671656488991#comment
[توصيات دروس الفيديو ذات الصلة: الواجهة الأمامية للويب]
ما ورد أعلاه هو كيف يمكنك فهم مشكلة التأشير هذه في JS؟ قم بإلقاء نظرة على تفاصيل هذه المقالة لمزيد من المعلومات، يرجى الانتباه إلى المقالات الأخرى ذات الصلة على موقع php الصيني!