دليل جافا سكريبت الجزء الثالث: المتغيرات وأنواع البيانات والتعبيرات والكائنات

اليوم ، في الجزء الثالث من ترجمة دليل جافا سكريبت ، سنتحدث عن طرق مختلفة للإعلان عن المتغيرات ، وعن أنواع البيانات ، وعن التعبيرات وعن ميزات العمل مع الكائنات.

الجزء الأول: البرنامج الأول وميزات اللغة والمعايير
الجزء الثاني: نمط الكود وهيكل البرنامج
الجزء الثالث: المتغيرات وأنواع البيانات والتعبيرات والكائنات
الجزء 4: الميزات
الجزء الخامس: المصفوفات والحلقات
الجزء السادس: الاستثناءات ، الفاصلة المنقوطة ، حرفية أحرف البدل
الجزء 7: الوضع الصارم ، هذه الكلمة الرئيسية ، والأحداث ، والوحدات ، والحسابات الرياضية
الجزء الثامن: نظرة عامة على ميزات ES6
الجزء التاسع: نظرة عامة على معايير ES7 و ES8 و ES9



المتغيرات


المتغير هو معرف يتم تعيينه لقيمة. يمكن الوصول إلى المتغير في البرنامج ، والعمل بهذه الطريقة مع القيمة المعينة له.

لا يحتوي المتغير في JavaScript نفسه على معلومات حول نوع القيم التي سيتم تخزينها فيه. هذا يعني أنه من خلال الكتابة إلى متغير ، على سبيل المثال ، سلسلة ، يمكنك لاحقًا كتابة رقم فيه. مثل هذه العملية لن تسبب خطأ في البرنامج. هذا هو السبب في أن جافا سكريبت تسمى أحيانًا اللغة "غير المنضبطة".

قبل استخدام المتغير ، يجب الإعلان عنه باستخدام الكلمة var أو let . عندما يتعلق الأمر بالثابت ، يتم استخدام الكلمة الأساسية const . يمكن الإعلان عن متغير وتعيينه بقيمة معينة دون استخدام هذه الكلمات الرئيسية ، ولكن لا ينصح بذلك.

var الكلمات الرئيسية var


قبل المعيار ES2015 ، كان استخدام الكلمة الأساسية var هو الطريقة الوحيدة لإعلان المتغيرات.

 var a = 0 

إذا var حذف var في هذا البناء ، فسيتم تعيين القيمة إلى متغير غير معلن. تعتمد نتيجة هذه العملية على الوضع الذي يعمل فيه البرنامج.

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

 function notVar() { bNotVar = 1 //    } notVar() console.log(bNotVar) 

ستحصل على 1 وحدة التحكم ، وعادة لا يتوقع أحد هذا السلوك من البرنامج ، لا يبدو التعبير bNotVar = 1 محاولة لإعلان المتغير وتهيئته ، ولكن كمحاولة للوصول إلى متغير في bNotVar = 1 الخارجي bNotVar = 1 للوظيفة (هذا أمر طبيعي تمامًا). ونتيجة لذلك ، فإن الإعلان الضمني للمتغيرات يربك الشخص الذي يقرأ الشفرة ويمكن أن يؤدي إلى سلوك برنامج غير متوقع. في وقت لاحق سنتحدث عن الدالات والنطاقات ، في الوقت الحالي ، نحاول دائمًا استخدام كلمات رئيسية متخصصة عندما يكون معنى التعبير هو إعلان متغير. إذا تم إعادة كتابة نص الوظيفة في هذا المثال بالشكل var bNotVar = 1 ، var bNotVar = 1 محاولة بدء جزء التعليمات البرمجية أعلاه إلى ظهور رسالة خطأ (يمكن رؤيته في وحدة تحكم المستعرض).

قد يبدو ، على سبيل المثال ، مثل هذا: Uncaught ReferenceError: bNotVar is not defined . يتلخص معناها في حقيقة أن البرنامج لا يمكن أن يعمل مع متغير غير موجود. من الأفضل بكثير ، عند بدء تشغيل البرنامج ، أن ترى رسالة خطأ كهذه بدلاً من كتابة تعليمات برمجية غير مفهومة يمكن أن تتصرف بشكل غير متوقع.

إذا ، عند الإعلان عن متغير ، لم تتم تهيئته ، ولم يتم تعيين أي قيمة له ، فسيتم تعيينه تلقائيًا للقيمة undefined .

 var a //typeof a === 'undefined' 

يمكن الإعلان عن المتغيرات المُعلنة باستخدام الكلمة الأساسية var مرارًا وتكرارًا من خلال تعيين قيم جديدة لها (ولكن هذا يمكن أن يربك شخصًا يقرأ الرمز).

 var a = 1 var a = 2 

يمكنك تعريف عدة متغيرات في تعبير واحد:

 var a = 1, b = 2 

يُدعى نطاق المتغير نطاق البرنامج الذي يمكن فيه الوصول إلى هذا المتغير (مرئي).

يتم تعيين متغير تمت تهيئته باستخدام الكلمة الأساسية var خارج دالة لكائن عمومي. له نطاق عالمي ويمكن الوصول إليه من أي مكان في البرنامج. إذا تم التصريح عن متغير باستخدام الكلمة الأساسية var داخل دالة ، فإنه يكون مرئيًا فقط داخل هذه الوظيفة ، كونه متغيرًا محليًا لها.

إذا تم الإعلان عن متغير في دالة باستخدام var الذي يتطابق اسمه مع اسم متغير معين من النطاق العام ، فسيتم "تجاوز" المتغير العام. أي ، عند الوصول إلى مثل هذا المتغير داخل الوظيفة ، فسيستخدم نسخته المحلية.

من المهم أن نفهم أن الكتل (مناطق التعليمات البرمجية المغلقة بأقواس) لا تخلق مناطق رؤية جديدة. يتم إنشاء نطاق جديد عندما يتم استدعاء الوظيفة. تحتوي الكلمة الأساسية var على ما يسمى بالنطاق الوظيفي ، وليس النطاق الأساسي.

إذا تم التصريح عن متغير في رمز الوظيفة ، فسيكون مرئيًا لكود الوظيفة بالكامل. حتى إذا تم الإعلان عن متغير باستخدام var في نهاية رمز الوظيفة ، يمكنك الرجوع إليه في بداية الكود ، حيث تعمل آلية رفع المتغيرات (الرفع) في JavaScript. هذه الآلية "تثير" الإعلانات المتغيرة ، ولكن ليس عمليات التهيئة الخاصة بها. يمكن أن يكون هذا مصدرًا للارتباك ، لذا اجعلها قاعدة لإعلان المتغيرات في بداية الدالة.

let دع الكلمات الرئيسية


ظهرت الكلمة الرئيسية let في ES2015 ، والتي يمكن تبسيطها باسم الإصدار "block" من var . يقتصر نطاق المتغيرات المعلنة باستخدام الكلمة الرئيسية let على الكتلة أو عامل التشغيل أو التعبير الذي تم التصريح عنه ، بالإضافة إلى الكتل المتداخلة.

إذا كانت كلمة "let" في حد ذاتها لا تبدو واضحة جدًا ، فيمكن للمرء أن يتخيل استخدام كلمة "let" بدلاً من ذلك. ثم يمكن ترجمة التعبير let color = 'red' إلى اللغة الإنجليزية على النحو التالي: "دع اللون يكون أحمر" ، وإلى اللغة الروسية على النحو التالي: "دع اللون أحمر".

باستخدام الكلمة Let ، يمكنك التخلص من الغموض المرتبط var (على سبيل المثال ، لا يمكنك تعريف نفس المتغير مرتين باستخدام let ). استخدام let خارج الدالة ، على سبيل المثال عند تهيئة الحلقات ، لا يُنشئ متغيرات عامة.

على سبيل المثال ، سيؤدي مثل هذا الرمز إلى حدوث خطأ:

 for (let i = 0; i < 5; i++) {   console.log(i) } console.log(i) 

إذا تمت تهيئة الحلقة ، فسيتم الإعلان عن العداد i باستخدام الكلمة الأساسية var ، ثم i متاحًا خارج الحلقة بعد اكتمالها.

في الوقت الحاضر ، عند تطوير برامج JS استنادًا إلى المعايير الحديثة ، يمكنك التخلي تمامًا عن var واستخدام الكلمات الرئيسية let and const .

const كلمة أساسية ثابتة


المتغيرات المعلنة باستخدام var أو let الكلمات الرئيسية يمكن استبدالها. إذا const استخدام const بدلاً من هذه الكلمات الأساسية ، فلا يمكنك تعيين قيمة جديدة لثابت معلن ومهيأ بمساعدته.

 const a = 'test' 

في هذا المثال ، لا يمكن تعيين قيمة ثابتة للثابت a . ولكن تجدر الإشارة إلى أنه إذا لم يكن a قيمة بدائية ، مثل رقم ، ولكن كائنًا ، باستخدام الكلمة الأساسية const لا يحمي هذا الكائن من التغييرات.

عندما يقولون أن الكائن مكتوب في متغير ، فهذا يعني في الواقع أن المتغير يشير إلى الكائن. لا يمكن تغيير هذا الارتباط ، ويمكن تغيير الكائن الذي يؤدي إليه الارتباط.

الكلمة الأساسية الثابتة لا تجعل الكائنات غير قابلة للتغيير. إنه يحمي ببساطة من التغييرات التي تطرأ على الإشارات إليها المكتوبة في الثوابت المقابلة. إليك ما يبدو عليه:

 const obj = {} console.log(obj.a) obj.a = 1 // console.log(obj.a) //obj = 5 //  

في ثابت الكائن ، عند التهيئة ، تتم كتابة كائن فارغ جديد. محاولة الوصول إلى خصائصه a ، التي لا وجود لها ، لا تسبب خطأ. تصبح وحدة التحكم undefined . بعد ذلك ، نضيف خاصية جديدة إلى الكائن ونحاول مرة أخرى الوصول إليه. هذه المرة تصل قيمة هذه الخاصية - 1 - إلى وحدة التحكم. إذا ألغيت تعليق السطر الأخير من المثال ، فستؤدي محاولة تنفيذ هذا الرمز إلى حدوث خطأ.

الكلمة الأساسية const مشابهة جدًا let ، على وجه الخصوص ، لها نطاق كتلة.

في الظروف الحديثة ، من المقبول تمامًا استخدام الكلمة الأساسية const ، واللجوء إلى let في حالات خاصة فقط ، للإعلان عن جميع الكيانات التي لا يتم تغيير قيمها. لماذا؟ الشيء هو أنه من الأفضل السعي لاستخدام أبسط الإنشاءات المتاحة حتى لا تعقد البرامج وتجنب الأخطاء.

أنواع البيانات


يشار إلى جافا سكريبت أحيانًا باسم اللغة "غير المنضبطة" ، ولكن هذا ليس صحيحًا. صحيح أنه يمكنك كتابة قيم الأنواع المختلفة في المتغيرات ، ولكن هناك أنواع بيانات في JavaScript ، على الرغم من ذلك. على وجه الخصوص ، نحن نتحدث عن أنواع البيانات الأولية والبيانات.

لتحديد نوع البيانات لقيمة معينة ، يمكنك استخدام عامل typeof . تقوم بإرجاع سلسلة تشير إلى نوع المعامل.

types أنواع البيانات البدائية


فيما يلي قائمة بأنواع بيانات JavaScript البدائية:

  • number
  • string (سلسلة)
  • boolean (منطقي)
  • null (قيمة null خاصة)
  • undefined (قيمة خاصة undefined )
  • symbol (الرمز المستخدم في حالات خاصة ، ظهر في ES6)

هنا يتم إعطاء أسماء أنواع البيانات في الشكل الذي يعيدها نوع عامل التشغيل.

لنتحدث عن أنواع البيانات الأكثر استخدامًا من هذه القائمة.

اكتب الرقم


يتم تمثيل قيم number النوع في JavaScript كأرقام فاصلة عائمة مزدوجة الدقة 64 بت.

في الكود ، يتم تمثيل الحرف الرقمية كأرقام صحيحة وأرقام كسرية في النظام العشري. يمكنك استخدام طرق أخرى لتسجيل الأرقام. على سبيل المثال ، إذا كانت هناك في بداية الحرف العددي العددي بادئة 0x - يُنظر إليها على أنها رقم مكتوب في التدوين الست عشري. يمكن أيضًا كتابة الأرقام بترميز أسي (في مثل هذه الأرقام يمكنك العثور على الحرف e ).

فيما يلي أمثلة على الإدخالات الصحيحة:

 10 5354576767321 0xCC //   

هنا الأرقام الكسرية.

 3.14 .1234 5.2e4 //5.2 * 10^4 

الحرف الرقمية (هذا السلوك يتميز أيضًا ببعض الأنواع البدائية الأخرى) ، عندما تحاول الوصول إليها ككائنات ، تلقائيًا ، طوال مدة العملية ، يتم تحويلها إلى الكائنات المقابلة ، والتي تسمى "أغلفة الكائنات". في هذه الحالة ، نحن نتحدث عن Number غلاف الكائن.

هنا ، على سبيل المثال ، تبدو وكأنها محاولة للوصول إلى المتغير a ، حيث تتم كتابة حرفي رقمي ، ككائن ، في وحدة تحكم Google Chrome.


تلميح التفاف الكائن رقم

إذا استخدمت ، على سبيل المثال ، طريقة toString() لكائن من النوع Number ، فسوف تُرجع سلسلة تمثيل للرقم. يبدو الأمر المطابق الذي يمكن تنفيذه في وحدة تحكم المتصفح (وفي الكود العادي) كما يلي:

 a.toString() 

لاحظ الأقواس المزدوجة بعد اسم الطريقة. إذا لم تضعها ، فلن يعطي النظام خطأ ، ولكن بدلاً من الإخراج المتوقع ، سيكون لدى وحدة التحكم شيئًا لا يبدو وكأنه تمثيل سلسلة للرقم 5.

يمكن استخدام كائن Number العالمي في شكل مُنشئ ، وإنشاء أرقام جديدة بمساعدته (على الرغم من أنه في هذا النموذج لا يتم استخدامه تقريبًا) ، يمكن استخدامه أيضًا ككيان مستقل دون إنشاء مثيلات منه (أي ، بعض الأرقام ممثلة منه) مساعدة). على سبيل المثال ، تحتوي الخاصية Number.MAX_VALUE على الحد الأقصى للقيمة الرقمية التي يمكن تمثيلها في JavaScript.

اكتب سلسلة


قيم string النوع هي تسلسلات من الأحرف. يتم تحديد هذه القيم على أنها سلسلة حرفية محاطة بعلامات اقتباس مفردة أو مزدوجة.

 'A string' "Another string" 

يمكن تقسيم قيم السلسلة إلى عدة أجزاء باستخدام حرف الخط المائل العكسي.

 "A \ string" 

قد تحتوي السلسلة على ما يسمى بتسلسلات الهروب التي يتم تفسيرها عند طباعة السلسلة إلى وحدة التحكم. على سبيل المثال ، يعني التسلسل \n حرف سطر جديد. يمكن أيضًا استخدام حرف الخط المائل العكسي لإضافة علامات الاقتباس إلى السلاسل المغلقة في نفس علامة الاقتباس. يؤدي ترك حرف الاقتباس بـ \ إلى عدم إدراك النظام كحرف خاص.

 'I\'ma developer' 

يمكن ربط السلاسل باستخدام عامل التشغيل + .

 "A " + "string" 

قالب الحرف


قدم ES2015 ما يسمى بالحرف النموذجي أو سلاسل النمط. وهي سلاسل محاطة بعلامة (()) ولها بعض الخصائص المثيرة للاهتمام.

 `a string` 

على سبيل المثال ، في حرفية القالب ، يمكنك استبدال قيم معينة ناتجة عن تقييم تعبيرات JavaScript.

 `a string with ${something}` `a string with ${something+somethingElse}` `a string with ${obj.something()}` 

يسهّل استخدام علامات الاقتباس الخلفية كتابة سلسلة حروف متعددة الأسطر:

 `a string with ${something}` 

اكتب منطقي


تحتوي جافا سكريبت على بضع كلمات محجوزة تُستخدم عند العمل بقيم منطقية - هذه true (صواب) false (خطأ). عمليات المقارنة ، مثل == ، === ، < ، > ، ترجع true أو false .

يتم استخدام التعبيرات المنطقية في التركيبات مثل if while ، مما يساعد على التحكم في تقدم البرنامج.

وتجدر الإشارة إلى أنه في حالة توقع true أو false ، يمكنك استخدام القيم الأخرى التي تعتبرها اللغة تلقائيًا صحيحة (صادقة) أو خاطئة (زائفة).

على وجه الخصوص ، فيما يلي قيم خاطئة:

 0 -0 NaN undefined null '' //  

القيم المتبقية صحيحة.

اكتب null


جافا سكريبت لها قيمة null خاصة تشير إلى عدم وجود قيمة. تستخدم معاني مماثلة في لغات أخرى.

اكتب غير محدد


تشير القيمة undefined المكتوبة إلى متغير معين إلى أن هذا المتغير لم تتم تهيئته ولا توجد قيمة له.

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

من أجل التحقق من قيمة undefined ، يمكنك استخدام البناء التالي.

 typeof variable === 'undefined' 

▍ كائنات


كل القيم غير البدائية لها نوع كائن. نحن نتحدث عن الدوال والمصفوفات وما نسميه "كائنات" وعن العديد من الكيانات الأخرى. تعتمد جميع أنواع البيانات هذه على نوع object ، وعلى الرغم من اختلافها في كثير من النواحي عن بعضها البعض ، إلا أنها تشترك في الكثير.

التعبيرات


التعبيرات هي أجزاء من التعليمات البرمجية التي يمكن معالجتها والحصول عليها على أساس الحسابات التي تم إجراؤها بقيمة معينة. تحتوي JavaScript على عدة فئات من التعبيرات.

التعبيرات الحسابية


تقع التعبيرات التي تكون نتائج حسابها عبارة عن أرقام ضمن هذه الفئة.

 1 / 2 i++ i -= 2 i * 2 

تعبيرات السلسلة


نتيجة تقييم مثل هذه العبارات هي السلاسل.

 'A ' + 'string' 'A ' += 'string' 

التعبيرات الأولية


تندرج الحرفي والثوابت والمراجع إلى المعرّفات في هذه الفئة.

 2 0.02 'something' true false this // ,     undefined i // i     

يتضمن هذا أيضًا بعض الكلمات الأساسية ومنشآت JavaScript.

 function class function* // yield // /   yield* //     async function* //   await //     /pattern/i //  () // 

الصفيف وتعبيرات تهيئة الكائن


 [] //  {} //  [1,2,3] {a: 1, b: 2} {a: {b: 1}} 

التعبيرات المنطقية


في التعبيرات المنطقية ، يتم استخدام العوامل المنطقية ، ونتيجة حسابها هي القيم المنطقية.

 a && b a || b !a 

تعبيرات الوصول إلى الممتلكات


تتيح لك هذه التعبيرات الوصول إلى خصائص وأساليب الكائنات.

 object.property //   ( )  object[property] object['property'] 

تعبيرات إنشاء كائن


 new object() new a(1) new MyRectangle('name', 2, {a: 4}) 

تعبيرات إعلان دالة


 function() {} function(a, b) { return a * b } (a, b) => a * b a => a * 2 () => { return 2 } 

تعبيرات نداء


يتم استخدام هذه التعبيرات لاستدعاء وظائف أو طرق الكائنات.

 ax(2) window.resize() 

العمل مع الأشياء


لقد واجهنا بالفعل أشياء أعلاه ، نتحدث عن حرفية الكائن ، حول استدعاء أساليبها ، حول الوصول إلى خصائصها. هنا نتحدث عن الأشياء بمزيد من التفصيل ، على وجه الخصوص ، النظر في آلية وراثة النموذج الأولي واستخدام الكلمة الرئيسية class .

▍ الوراثة النموذجية


تبرز JavaScript بين لغات البرمجة الحديثة من حيث أنها تدعم وراثة النموذج الأولي. تستخدم معظم اللغات الموجهة للكائنات نموذج وراثة قائم على الفصل.

يحتوي كل كائن JavaScript على خاصية خاصة ( __proto__ ) تشير إلى كائن آخر هو النموذج الأولي الخاص به. يرث كائن خصائص وأساليب النموذج الأولي.

افترض أن لدينا كائنًا تم إنشاؤه باستخدام كائن حرفي.

 const car = {} 

أو أنشأنا كائنًا باستخدام مُنشئ Object .

 const car = new Object() 

في أي من هذه الحالات ، سيكون النموذج الأولي لكائن car هو Object.prototype .

إذا قمت بإنشاء مصفوفة عبارة عن كائن أيضًا ، فإن النموذج الأولي الخاص به هو كائن Array.prototype .

 const list = [] //  const list = new Array() 

يمكنك التحقق من ذلك على النحو التالي.

 car.__proto__ == Object.prototype //true car.__proto__ == new Object().__proto__ //true list.__proto__ == Object.prototype //false list.__proto__ == Array.prototype //true list.__proto__ == new Array().__proto__ //true 

استخدمنا هنا خاصية __proto__ ، ولا يجب أن تكون متاحة للمطور ، ولكن يمكنك الوصول إليها عادةً. وتجدر الإشارة إلى أن الطريقة الأكثر موثوقية للحصول على نموذج أولي لكائن هي استخدام طريقة getPrototypeOf() Object .

 Object.getPrototypeOf(new Object()) 

يمكن الوصول إلى جميع خصائص وأساليب النموذج الأولي للكائن الذي لديه هذا النموذج الأولي. هنا ، على سبيل المثال ، تبدو قائمتهم لصفيف.


تلميح الصفيف

النموذج الأساسي لجميع الكائنات هو Object.prototype .

 Array.prototype.__proto__ == Object.prototype 

Object.prototype يحتوي النموذج Object.prototype على نموذج أولي.

ما رأيناه أعلاه هو مثال على سلسلة نموذجية.

عند محاولة الوصول إلى خاصية أو أسلوب كائن ، إذا لم يكن الكائن نفسه يمتلك مثل هذه الخاصية أو الطريقة ، فسيتم البحث عنها في نموذجها الأولي ، ثم في النموذج الأولي ، وما إلى ذلك ، حتى يتم العثور على المطلوب ، أو حتى لن تنتهي سلسلة النموذج الأولي.

بالإضافة إلى إنشاء كائنات باستخدام عامل التشغيل new واستخدام حرفية الكائن أو حرفية الصفيف ، يمكنك إنشاء مثيل لكائن باستخدام طريقة Object.create() . الوسيطة الأولى التي تم تمريرها إلى هذه الطريقة هي كائن سيصبح النموذج الأولي للكائن الذي تم إنشاؤه باستخدامه.

 const car = Object.create(Object.prototype) 

يمكنك التحقق مما إذا كان الكائن جزءًا من سلسلة النموذج الأولي لكائن آخر باستخدام طريقة isPrototypeOf() .

 const list = [] Array.prototype.isPrototypeOf(list) 

وظائف المنشئ


أعلاه ، أنشأنا كائنات جديدة باستخدام وظائف المُنشئ المتوفرة بالفعل في اللغة (عندما يتم استدعاؤها ، يتم استخدام الكلمة الرئيسية new ). . .

 function Person(name) { this.name = name } Person.prototype.hello = function() { console.log(this.name) } let person = new Person('Flavio') person.hello() console.log(Person.prototype.isPrototypeOf(person)) 

-. , this . name , . . - , name , .

, name , . , , , hello() . , Person hello() ( ).


ES6 JavaScript «».

JavaScript . , JS . , , , « » . , , , , , .


.

 class Person { constructor(name) {   this.name = name } hello() {   return 'Hello, I am ' + this.name + '.' } } 

, new ClassIdentifier() .

constructor , .

. hello() — , , . Person .

 const flavio = new Person('Flavio') flavio.hello() 

,


. , , , , .

, ( ) , , -, .

 class Programmer extends Person { hello() {   return super.hello() + ' I am a programmer.' } } const flavio = new Programmer('Flavio') flavio.hello() 

hello() Hello, I am Flavio. I am a programmer .

(), .

super .


, , , , , . ( static ) , .


JavaScript , (, ) . , , .


, get set . — , , . -, — .

 class Person {   constructor(name) {     this.userName = name   }   set name(value) {     this.userName = value   }   get name() {     return this.userName   } } 

الملخص


, , JavaScript. .

أعزائي القراء! JS, , class.

Source: https://habr.com/ru/post/ar429838/


All Articles