• 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 الذي يقف ورائه وكيف يتم إستدعائه ...

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

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1
بتاريخ 5 دقائق مضت قال Brahim Semmani:

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

 

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

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

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 5 دقائق مضت قال بلال زيادة:

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



 

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

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن