Bird Dog من التحدي الأخير بشكل جيد. ومع ذلك ، لاحظ أن جميع Birds التي يتم إنشاؤها بواسطة منشئ Bird تسمى تلقائيًا Albert ، وهي زرقاء اللون ، ولها أرجل. ماذا لو كنت تريد الطيور ذات القيم المختلفة للاسم واللون؟ من الممكن تغيير خصائص كل طائر يدويًا ، لكن ذلك سيكون كثيرًا من العمل: دعونا بجعة = طائر جديد () ؛افترض أنك كنت تكتب برنامج لتتبع مئات أو حتى الآلاف من الطيور المختلفة في القفص. سيستغرق الأمر الكثير من الوقت لإنشاء جميع الطيور ، ثم تغيير الخصائص إلى قيم مختلفة لكل واحد. لإنشاء كائنات
swan.name = "Carlos"؛
swan.color = "white"؛
Bird مختلفة بسهولة أكبر ، يمكنك تصميم منشئ Bird الخاص بك لقبول المعلمات: وظيفة الطيور (الاسم واللون) {ثم قم بتمرير القيم كحجج لتعريف كل طائر فريد في منشئ
this.name = name؛
this.color = لون؛
this.numLegs = 2 ،
}
Bird : let cardinal = new Bird("Bruce", "red"); هذا يعطي مثال جديد من Bird مع اسم وخصائص اللون لتعيين بروس والأحمر ، على التوالي. لا يزال يتم تعيين الخاصية numLegs إلى 2. يحتوي cardinal على هذه الخصائص: cardinal.name // => بروسالمنشئ أكثر مرونة. من الممكن الآن تحديد خصائص كل
cardinal.color // => أحمر
cardinal.numLegs // => 2
Bird في وقت إنشائه ، وهو أحد الطرق التي تكون بها منشئات جافا سكريبت مفيدة للغاية. يقوموا بتجميع الأشياء معًا استنادًا إلى الخصائص والسلوكيات المشتركة وتحديد مخطط يعمل تلقائيًا على إنشائها. Dog آخر. هذه المرة ، إعداده لاتخاذ المعلمات name color ، ولها خاصية numLegs ثابتة في 4. ثم إنشاء Dog جديد المحفوظة في terrier متغير. تمريرها جهازي كوسائط name ولخصائص color . Dog يجب أن يحصل على حجة name .
testString: 'assert((new Dog("Clifford")).name === "Clifford", "Dog should receive an argument for name.");'
- text: يجب أن يحصل Dog على حجة color .
testString: 'assert((new Dog("Clifford", "yellow")).color === "yellow", "Dog should receive an argument for color.");'
- text: يجب أن يكون Dog لديه خاصية numLegs مضبوطة على 4.
testString: 'assert((new Dog("Clifford")).numLegs === 4, "Dog should have property numLegs set to 4.");'
- text: يجب أن يتم إنشاء terrier باستخدام منشئ Dog .
testString: 'assert(terrier instanceof Dog, "terrier should be created using the Dog constructor.");'
```