3.5 KiB
3.5 KiB
id, title, challengeType, videoUrl, localeTitle
id | title | challengeType | videoUrl | localeTitle |
---|---|---|---|---|
587d7db2367417b2b2512b8a | Use Closure to Protect Properties Within an Object from Being Modified Externally | 1 | استخدم Closure لحماية الخصائص داخل كائن من التعديل الخارجي |
Description
bird
name
ملكية عامة. ويعتبر الجمهور لأنه يمكن الوصول إليها وتغييرها خارج تعريف bird
. bird.name = "Duffy" ؛لذلك ، يمكن لأي جزء من التعليمات البرمجية بسهولة تغيير اسم
bird
إلى أي قيمة. فكر في أشياء مثل كلمات المرور والحسابات المصرفية التي يمكن تغييرها بسهولة عن طريق أي جزء من تعليمات البرمجة لديك. يمكن أن يسبب الكثير من القضايا. إن أبسط طريقة لجعل الخصائص خاصة هي عن طريق إنشاء متغير داخل دالة المنشئ. هذا يغير نطاق هذا المتغير ليكون داخل دالة المنشئ مقابل المتاحة عالمياً. بهذه الطريقة ، يمكن الوصول إلى الخاصية وتغييرها فقط بالطرق داخل دالة المنشئ أيضًا. وظيفة الطيور () {هنا ، يعد
واسمحوا hatchedEgg = 10 ؛ // ملكية خاصة
this.getHatchedEggCount = function () {/ / / يمكن للجمهور أن يستخدم طريقة الطيور
العودة مع الفقس.
}؛
}
دع الحبيب = طائر جديد () ؛
ducky.getHatchedEggCount ()؛ // returns 10
getHachedEggCount
طريقة مميزة ، لأنه يمتلك إمكانية الوصول إلى المتغير hatchedEgg
. هذا ممكن لأنه يتم الإعلان عن hatchedEgg
في نفس السياق مثل getHachedEggCount
. في جافا سكريبت ، يمكن لأي وظيفة دائمًا الوصول إلى السياق الذي تم إنشاؤه فيه. وهذا ما يسمى closure
. Instructions
weight
في وظيفة Bird
لذا فهو متغير خاص. ثم قم بإنشاء أسلوب getWeight
بإرجاع قيمة weight
. Tests
tests:
- text: يجب أن تكون خاصية <code>weight</code> متغيرًا خاصًا.
testString: 'assert(!code.match(/this\.weight/g), "The <code>weight</code> property should be a private variable.");'
- text: يجب أن تقوم التعليمات البرمجية بإنشاء طريقة في <code>Bird</code> تسمى <code>getWeight</code> تقوم بإرجاع <code>weight</code> .
testString: 'assert((new Bird()).getWeight() === 15, "Your code should create a method in <code>Bird</code> called <code>getWeight</code> that returns the <code>weight</code>.");'
Challenge Seed
function Bird() {
this.weight = 15;
}
Solution
// solution required