--- id: 587d7dae367417b2b2512b79 title: Extend Constructors to Receive Arguments challengeType: 1 videoUrl: '' localeTitle: Extender constructores para recibir argumentos --- ## Description
Los constructores de Bird y Dog del último desafío funcionaron bien. Sin embargo, tenga en cuenta que todas las Birds que se crean con el constructor Bird se denominan automáticamente Albert, son de color azul y tienen dos patas. ¿Y si quieres pájaros con diferentes valores de nombre y color? Es posible cambiar las propiedades de cada ave manualmente, pero eso sería mucho trabajo:
dejar cisne = nuevo pájaro ();
swan.name = "Carlos";
swan.color = "blanco";
Supongamos que estaba escribiendo un programa para realizar un seguimiento de cientos o incluso miles de aves diferentes en un aviario. Tomaría mucho tiempo crear todas las aves, luego cambiar las propiedades a diferentes valores para cada una. Para crear más fácilmente diferentes objetos Bird , puede diseñar su constructor Bird para que acepte parámetros:
función pájaro (nombre, color) {
this.name = nombre;
this.color = color;
this.numLegs = 2;
}
Luego pase los valores como argumentos para definir cada ave única en el constructor de Bird : let cardinal = new Bird("Bruce", "red"); Esto da una nueva instancia de Bird con las propiedades de nombre y color establecidas en Bruce y rojo, respectivamente. La propiedad numLegs todavía está establecida en 2. El cardinal tiene estas propiedades:
cardinal.name // => Bruce
cardinal.color // => rojo
cardinal.numLegs // => 2
El constructor es más flexible. Ahora es posible definir las propiedades de cada Bird en el momento de su creación, que es una forma en que los constructores de JavaScript son tan útiles. Agrupan los objetos en función de las características y el comportamiento compartidos y definen un plan que automatiza su creación.
## Instructions
Crea otro constructor de Dog . Esta vez, numLegs para tomar el name y el color los parámetros, y numLegs que la propiedad numLegs fije en 4. Luego crea un nuevo Dog guardado en una variable terrier . Pásale dos cadenas como argumentos para las propiedades de name y color .
## Tests
```yml tests: - text: Dog debe recibir un argumento para su name . testString: 'assert((new Dog("Clifford")).name === "Clifford", "Dog should receive an argument for name.");' - text: Dog debe recibir un argumento para el color . testString: 'assert((new Dog("Clifford", "yellow")).color === "yellow", "Dog should receive an argument for color.");' - text: Dog debe tener la propiedad numLegs establecida en 4. testString: 'assert((new Dog("Clifford")).numLegs === 4, "Dog should have property numLegs set to 4.");' - text: terrier debe ser creado usando el constructor Dog . testString: 'assert(terrier instanceof Dog, "terrier should be created using the Dog constructor.");' ```
## Challenge Seed
```js function Dog() { } ```
## Solution
```js // solution required ```