اذهب إلى المحتوى

السؤال

نشر

لدي كود جافا سكريبت داخل بيئة تشغيل Node.js وأواجه صعوبة في فهم دلالة this داخل هذا الكود

var a = this; // "this" كائن فارغ
this.anObject = {name:"An object"};

var testFn = function() {
    var TThis = this; // "this" هنا تدل على الكائن العام الخاص بنود 
};

testFn();

ففي السطر الاول var a = this تكون a عباره عن كائن فارغ بينما this داخل أي دالة تكون عباره عن الكائن العام داخل Node.js (global)

ماتفسير ذلك ؟

Recommended Posts

  • 0
نشر (معدل)

this  هي عبارة عن فقط مؤشر يؤشر على موقع الأوبجت الذي نحن داخله this لا تحتوي على اي شئ هي فقط مؤشر على موقع في الذاكرة يدل على موقع الاوبجت الذي نحن نقوم بعمل العمليات عليه حاليا بالنسبة 

var a = this;  

انت لست تقوم باي شيئ او انت لا تؤشر على اي شئ سوى البراوزر و لكن بوجود هذه الدالة في السيرفير فلن تحتوي على شيئ لانك لم تقم باستخدامها داخل دالة او داخل معرف class فهي لن تدل على شيئ 

اما بالنسبة 

var testFn = function() {
    var TThis = this; // "this" هنا تدل على الكائن العام الخاص بنود 
};

 فهنا انت انت اقحمت هذا المؤشر داخل دالة بحيث سوف يقوم بالتاشير للشيئ الذي تقوم باجراء الدالة عليه و هو السيرفير او النود بشكل عام لأنه بالنهاية عبارة عن دالة معرفة او مجموعة من المكتبات التي تحتوي عدة تعريفات class

تم التعديل في بواسطة Nuhla Almasri
  • 0
نشر

"this" يشير إلى كائن عام
بشكل افتراضي ، يكون سياق التنفيذ سياقا عامًا - مما يعني أنه إذا تم تنفيذ كود كجزء من استدعاء دالة  فهذا يشير إلى كائن عام.

ولتوضيح هذه الفكرة أكثر لنقارن nodejs مع المتصفح ,  في المتصفح يوجد كائن window و هو الكائن العام في حالة المتصفح. وفي بيئة NodeJS ، ستكون قيمة الكائن العام هي قيمة كائن خاص يسمى global 

مثال في المتصفح this تمثل قيمة الكائن window

function foo () {
	console.log("Simple function call");
	console.log(this === window); 
}

foo();	//prints true on console
console.log(this === window) //Prints true on console.

وأيضا يمكن استخدام الكلمة this داخل كائن واللتي ستدل على الكائن الحالي . person


function Person(fn, ln) {
	this.first_name = fn;
	this.last_name = ln;

	this.displayName = function() {
		console.log(`Name: ${this.first_name} ${this.last_name}`);
	}
}

 

  • 0
نشر

بعيدا عن التعقيد فكلمة this معناها بالعربي "هذا" وهو في اللغة العربية حرف إشارة وعملها في البرمجة ايضاً الإشارة الى السياق أو الكائن الذي تم إستدعائها منه

فعندما تستخدم JavaScript في المتصفح وقمت بإنشاء كائن مثل

var obj = {num:1}

فيمكنك استدعائه بثلاث طرق

console.log(obj)

console.log(this.obj)

console.log(window.obj)

وتم ذلك لأننا كنا في سياق الكائن window وهو السياق الرئيسي

ففي الإستدعاء الأول تم عبر إستدعائه عبر اسمه فقط ولم نحتاج لإضافة أي شيء لأننا في سياق ال window

console.log(obj)

وفي الإستدعاء الثاني قمنا بإستخدم this بمعني هذا لأنها تشير الى الكائن window

console.log(this.obj)

وفي الإستدعاء الثالث قمنا بشكل مباشر بإستدعاء الكائن window والكائن obj الذي داخله

console.log(window.obj)

وعند تشغيل الكود في node فهو نفس الشيء ولكن الاسم فقط متغير بدل window لدينا global

فكلمة this أو هذا هي تشير الى الكائن الذي تم إستدعائها منه

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...