freeCodeCamp/curriculum/challenges/espanol/02-javascript-algorithms-an.../object-oriented-programming/extend-constructors-to-rece...

90 lines
2.8 KiB
Markdown
Raw Normal View History

---
id: 587d7dae367417b2b2512b79
title: Extender constructores para recibir argumentos
challengeType: 1
forumTopicId: 18235
dashedName: extend-constructors-to-receive-arguments
---
# --description--
Los constructores de `Bird` y `Dog` del último desafío funcionaron bien. Sin embargo, nota que todas las `Birds` que son creadas con el constructor `Bird`, automáticamente se nombran Albert, son de color azul y tienen dos patas. ¿Qué pasa si quieres Birds (aves) con diferentes valores para nombre y color? Es posible cambiar manualmente las propiedades de cada Bird (ave), pero sería bastante trabajo:
```js
let swan = new Bird();
swan.name = "Carlos";
swan.color = "white";
```
Supongamos que estabas escribiendo un programa para hacer seguimiento de cientos o incluso miles de aves diferentes en un aviario. Tardaría mucho tiempo en crear todas las aves, para luego cambiar las propiedades a diferentes valores para cada una. Para crear más fácilmente diferentes objetos `Bird`, puedes diseñar tu constructor de aves para aceptar parámetros:
```js
function Bird(name, color) {
this.name = name;
this.color = color;
this.numLegs = 2;
}
```
Luego pasa los valores como argumentos para definir cada ave única en el constructor `Bird`: `let cardinal = new Bird("Bruce", "red");` Esto genera una nueva instancia de `Bird` con propiedades `name` y `color` que tienen como valor `Bruce` y `red`, respectivamente. La propiedad `numLegs` aún está establecida en 2. El `cardinal` tiene estas propiedades:
```js
cardinal.name
cardinal.color
cardinal.numLegs
```
El constructor es más flexible. Ahora es posible definir las propiedades para cada `Bird` en el momento que se crea. Esta es una manera en que los constructores de JavaScript son tan útiles. Estos agrupan objetos basados en características y comportamiento compartidos, y definen un plano que automatiza su creación.
# --instructions--
Crea otro constructor `Dog`. Esta vez, configúralo para tomar los parámetros `name` y `color`, y haz que la propiedad `numLegs` quede fija en 4. Luego crea un nuevo `Dog` almacenado en una variable `terrier`. Pasale dos cadenas de texto como argumentos para las propiedades `name` y `color`.
# --hints--
`Dog` debe recibir un argumento para `name`.
```js
assert(new Dog('Clifford').name === 'Clifford');
```
`Dog` debe recibir un argumento para `color`.
```js
assert(new Dog('Clifford', 'yellow').color === 'yellow');
```
`Dog` debe tener la propiedad `numLegs` fija a 4.
```js
assert(new Dog('Clifford').numLegs === 4);
```
`terrier` debería ser creado usando el constructor `Dog`.
```js
assert(terrier instanceof Dog);
```
# --seed--
## --seed-contents--
```js
function Dog() {
}
```
# --solutions--
```js
function Dog (name, color) {
this.numLegs = 4;
this.name = name;
this.color = color;
}
const terrier = new Dog();
```