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

لماذا يجب تسمية عند التحويل from object to primitive ب [Symbol.toPrimitive]

السؤال

السلام عليكم ,

في هذا المثال مثلا  لدينا الرمز (sympolic system) :[Symbol.toPrimitive] كإسم خاصية في الكائن (property name) والدالة function(hint) كقيمة لهذه الخاصية :

let user = {
  name: "John",
  money: 1000,
//[Symbol.toPrimitive]هنا 
//  كإسم خاصية للدالة لماذا يجب إستخدامه حصرا ؟؟ و ماهو الكائن المنشيء له او الذي يرتبط معه ؟   
  [Symbol.toPrimitive](hint) {
    alert(`hint: ${hint}`);
    return hint == "string" ? `{name: "${this.name}"}` : this.money;
  }
};

ماتعلمته لحد الان هو ان اسم الخاصية يستخدم للوصول إلى القيمة بطريقة مباشرة مثلا user.name أو غير مباشرة ك for...in مثلا , ولكن هنا لدينا دالة كقيمة لرمز ([Symbol.toPrimitive]) بمعامل واحد (hint)  ,بغض النظر عن وضيفتها فهي مجرد مثال ,أظن أن تساؤلاتي واضحة الان ؟لماذا يجب استخدامه حصرا لتتم العملية ؟ ماهو built-in method الذي يقف ورائه وكيف يتم إستدعائه ...

أرجو أن تكون أسئلتي منطقية ,شكرا.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ 5 دقائق مضت قال Brahim Semmani:

لم تفهم سؤالي جيدا , هنا عندنا [Symbol.toPrimitive] هو اسم خاصية , القيمة هي دالة بمعامل واحد (hint) الدالة تقوم بعمليات في الخفاء كأن تستدعي typeof() , tostring() ,السؤال نحن لانرى ذالك ؟ اين يتم ذالك ؟ ماعلاقة [Symbol.toPrimitive] وهو اسم خاصية فقط ! اعذرني إن كانت الأسئلة غير واضحة وذالك لأن الامور مشوشة امامي ,شكرا.

 

بخصوص أين يتم ذلك يتم ذلك داخلياً في اللغة , سأعطيك مثال توضيحي الأن في مثلاً لغة PHP قمنا بالاستعلام داخل جدول في قاعدة بيانات وقمنا بجلب محتوياته , هل نشاهد ذلك أم يحدث الأمر داخلياً في اللغة عن طريق الدوال التي استخدمناها في عملية الاستعلام وهكذا الأمر في Symbol.toPrimitive التي تستخدم لتحويل الكائن إلى قيمة أولية . بمساعدة الخاصية Symbol.toPrimitive (التي تشير إلى دالة) , يمكننا تحويل الكائنات إلى القيم الأولية الموافقة لها , وهذه الدالة تستدعى مع الوسيط النصي hint , والذي يحدد ما هو النوع المفضل للقيمة الأولية المعادة , ويمكن أن تكون قيمة هذا الوسيط number أو string أو default.

ربما زيارة توثيق حسوب من هنا أو من هنا يفيدك كثيرا.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يوجد في جافاسكريبت دالة Symbol و هي دالة تعيد قيمة من النوع symbol , وتمتلك هذه الدالة خاصيات ساكنة و دوال ساكنة. كل رمز معاد من الدالة Symbol هو رمز فريد, ويمكن أن يستخدم كمعرف لخاصيات الكائنات.

يتم استخدامه حصراً حتى لو أنتا حابب تضع بيانات private بداخل Object تستخدمها على مستوى Application الخاص بك بس لا يتم عرضها في أي عملية تكرار  ( أي لا يتم عرض Symbol ) ففي المثال التالي لاحظ أنه لدينا عملية تكرار 

const myNewSymbol = Symbol();
	
let myObject = {
  username: "test", 
  title: "hello", 
  [myNewSymbol]: "Hello, How are You"
}

for(let val of Object.entries(myObject)){		
	console.log(val);
}

فأن عملية التكرار لا تعرض symbol كما في الصورة المرفقة. أتمنى أن أكون قد فهمت سؤالك جيداً وأجبت عنه بصورة جيدة.

 

سش.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال بلال زيادة:

يتم استخدامه حصراً حتى لو أنتا حابب تضع بيانات private بداخل Object تستخدمها على مستوى Application الخاص بك بس لا يتم عرضها في أي عملية تكرار  ( أي لا يتم عرض Symbol ) ففي المثال التالي لاحظ أنه لدينا عملية تكرار 



 

لم تفهم سؤالي جيدا , هنا عندنا [Symbol.toPrimitive] هو اسم خاصية , القيمة هي دالة بمعامل واحد (hint) الدالة تقوم بعمليات في الخفاء كأن تستدعي typeof() , tostring() ,السؤال نحن لانرى ذالك ؟ اين يتم ذالك ؟ ماعلاقة [Symbol.toPrimitive] وهو اسم خاصية فقط ! اعذرني إن كانت الأسئلة غير واضحة وذالك لأن الامور مشوشة امامي ,شكرا.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...