انتقل إلى المحتوى الرئيسي

حظر على "هذا"

@serverSerrverlesskiy

إزالة this الكلمة الأساسية من JavaScript تجعل اللغة أفضل!

هذا بسبب this يعتمد على كيفية استدعاء الوظيفة ، وليس مكان تعريفها. لذلك ، جافا سكريبتthis مصدر الكثير من الارتباك اللغويوضع.

يضمن استخدام هذا أن الوظيفة تعمل على الكائن المحدد في سياقه الذي تم استدعاؤه. من خلال thisطريقة ، لا يمكنك فقط الرجوع إلى أي خاصية من خصائص الكائن ، ولكن يمكنك أيضًا تمرير مرجع إلى الكائن بأكمله في مكان ما (تقليل أمان التطبيق).

قيمة الthis يسمى سياق الاستدعاء وسيتم تحديده عند استدعاء الوظيفة. على سبيل المثال ، دالة مثل هذه ، تم إعلانها بدون كائن ، صالحة تمامًا:

functionsay Hi() {
console.log(this.firstName)
}

هذه الوظيفة لا تعرف حتى الآن ما سيكون هذا. سيتم الكشف عن هذا عند تنفيذ البرنامج.

إذا تم تشغيل نفس الوظيفة في سياق كائنات مختلفة ، فستتلقى ملفًا مختلفًاthis:

var user = { firstName: 'John' }
var admin = { firstName: 'Admin' }

function funcName() {
console.log(this.firstName)
}
user.f = funcName
admin.g = funcName

// this is equal to the object before point:
user.f() // Joni
admin.g() // Admin
admin['g']() // Admin (access to the object is implemented through square brackets)

لذا ، فإن قيمة this لا تعتمد على كيفية إنشاء الوظيفة ، يتم تحديدها حصريًا وقت المكالمة.

"هذا" وعيوبه

الأساليب هي الوظائف التي يتم تخزينها في الكائنات. لكي تعرف الوظيفة أي كائن تعمل عليه ، استخدم this.

Poor

لكن this يفقد السياق في العديد من المواقف (القيمة المرجعة غير معروفة):

  • يفقد السياق داخل الوظائف المتداخلة
  • يفقد السياق في عمليات الاسترجاعات
  • this يفقد السياق عند استخدام الطريقة كمعالج للأحداث.

أفضل لغة

The_best

JavaScript هي لغة برمجة وظيفية ولغة قائمة على النموذج الأولي. إذا تخلصنا من هذا ، فسيتبقى لنا JavaScript كلغة برمجة وظيفية. هذا أفضل!

في نفس الوقت ، بدونthis تقدم JavaScript طريقة جديدة وفريدة للقيام بالبرمجة الموجهة للكائنات بدون فئات أو وراثة.

التخلي عن هذا

remember

أفضل طريقة لتجنب this المشاكل ذات الصلة ليست للاستخدام this على الاطلاق!

::: لاحظ جافا سكريبت تبدو JavaScript بدون هذا أفضل لغة برمجة وظيفية!

:::

يمكننا إنشاء كائنات مغلفة دون استخدام هذا كمجموعة من الإغلاق. بمساعدة React Hooks يمكننا إنشاء مكونات ذات حالة بدون this.

ال this لا يمكن إزالة الكلمة الأساسية من JavaScript دون تدمير جميع التطبيقات الموجودة. ومع ذلك ، ما الذي يمكن عمله؟ يمكننا الكتابة رمزنا الخاص بدون this والسماح باستخدامه في المكتبات فقط. في هذه الأثناء، new rules ESLint يتم إدخالها ، وحظر استخدامthis.

منذ الدرس الأخير تخلينا classes, we قل وداعا إلى this معهم.

مشاكل؟

Problem

اكتب لDiscord محادثة.

أسئلة:

Question

الthis الكلمة الرئيسية هي-

  1. الكائن الذي تنتمي إليه الطريقة
  2. الوسيطة الأولى في الوظيفة
  3. مجموعة من الخصائص

هل من الممكن الاستغناء عن هذا:

  1. يمكنك ، ومن الأفضل عدم استخدامها على الإطلاق
  2. هذا ممكن ، لكن لا ينصح به
  3. إنه مستحيل ، لأنه لا يمكن إزالة "هذا" من JavaScript

جافا سكريبت بدونthis يبدو أنه الأفضل:

  1. لغة البرمجة الوظيفية
  2. لغة البرمجة الإجرائية
  3. لغة البرمجة المنطقية

لفهم مقدار ما تعلمته في هذا الدرس ، قم بإجراء الاختبار فيmobile application من مدرستنا في هذا الموضوع.

! [المدرسة السومرية] (/ img / app.jpg)

الروابط

  1. Removing the 'this' keyword from JavaScript makes the language better
  2. The article "The this keyword in JavaScript"
  3. MDN web doc. Article "this"

المساهمون✨

الشكر يعود إلى هؤلاء الأشخاص الرائعين (emoji key):


Dmitriy K.


Dmitriy Vasilev

💵

Resoner2005

🐛 🎨 🖋

Navernoss

🖋 🐛 🎨

EnglishMoji!