3.8 KiB
3.8 KiB
id | title | localeTitle | challengeType |
---|---|---|---|
587d7dae367417b2b2512b79 | Extend Constructors to Receive Arguments | Extender constructores para recibir argumentos | 1 |
Description
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:
let swan = new Bird();Suponga que estaba escribiendo un programa para realizar un seguimiento de cientos o incluso miles de aves diferentes en una pajarera. 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
swan.name = "Carlos";
swan.color = "white";
Bird
, puede diseñar su constructor Bird para que acepte parámetros:
function Bird(name, color) {Luego, pase los valores como argumentos para definir cada ave única en el constructor de
this.name = name;
this.color = color;
this.numLegs = 2;
}
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 se establece en 2.
El cardinal
tiene estas propiedades:
cardinal.name // => BruceEl constructor es más flexible. Ahora es posible definir las propiedades de cada
cardinal.color // => red
cardinal.numLegs // => 2
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
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
tests:
- text: <code>Dog</code> debe recibir un argumento para su <code>name</code> .
testString: 'assert((new Dog("Clifford")).name === "Clifford", "<code>Dog</code> should receive an argument for <code>name</code>.");'
- text: <code>Dog</code> debe recibir un argumento para el <code>color</code> .
testString: 'assert((new Dog("Clifford", "yellow")).color === "yellow", "<code>Dog</code> should receive an argument for <code>color</code>.");'
- text: <code>Dog</code> debe tener la propiedad <code>numLegs</code> establecida en 4.
testString: 'assert((new Dog("Clifford")).numLegs === 4, "<code>Dog</code> should have property <code>numLegs</code> set to 4.");'
- text: <code>terrier</code> debe ser creado usando el constructor <code>Dog</code> .
testString: 'assert(terrier instanceof Dog, "<code>terrier</code> should be created using the <code>Dog</code> constructor.");'
Challenge Seed
function Dog() {
}
Solution
function Dog (name, color) {
this.numLegs = 4;
this.name = name;
this.color = color;
}
const terrier = new Dog();