Con este reto descubrí algo interesante y es que si extiendes una clase sobre otra debes siempre debes poner el super constructor aunque no le pases propiedades.
Ahora si dejo mi respuesta abajo.
Solución:
.
.
.
.
.
.
.
.
.
.
++Card.class.js:++
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(number){super()this.number= number
}makePay(quantity){try{if(this.number.length!==16)throwError('No tiene 16 dígitos')return{...super.makePay(quantity),lastCardNumbers:this.number.slice(-4)}}catch(e){throwError(e)}}}
Exactamente al mío 😎 solamente para que lo consideres, la clase Cash tranquilamente pudo haber quedado vació ya que no requiere sobreescribir el metodo makePay() ya que hereda todo.
Quedandote literalmente asi
import{Pay}from"./Pay.class.js";exportclassCashextendsPay{// Tu código aquí 👈}
Un reto muy interesante, mi solución:
🛡️
🛡️
🛡️
🛡️
🛡️
🛡️
🛡️
🛡️
🛡️
🛡️
++exercise.js++
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(card){super();this.card= card;}makePay(quantity){if(this.card.length===16){return{...super.makePay(quantity),lastCardNumbers:this.card.slice(-4)};}else{throwError("Error, la tarjeta debe ser de 16 digitos")}}}
.
. ------------------------------------------------------------ .
. 🛡️🛡️🛡️ESCUDO ANTI SPOILER 🛡️🛡️🛡️ .
. ------------------------------------------------------------ .
.
. Muy interesante este reto, creo que lo hare un par de veces mas para comprenderlo mejor.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Card.class.js
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(cardNumber){super();this.cardNumber= cardNumber;}makePay(quantity){if(this.cardNumber.length!==16){thrownewError("Número de tarjeta invalido");}return{...super.makePay(quantity),lastCardNumbers:this.cardNumber.slice(-4)};}}
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(cardNumber){super()this.cardNumber= cardNumber
}makePay(cantidadAPaga){if(this.cardNumber.length<16){thrownewError('Error en el longitud de los digitos de la tarjeta')}return{...super.makePay(cantidadAPaga),lastCardNumbers:this.cardNumber.substring(this.cardNumber.length-4,this.cardNumber.length)}}}
Comparto mi solución. Nunca se den por vencidos. Poco a poco se llega a diferentes lugares.
functionprocessPay(method, quantity){return method.makePay(quantity);}classPay{makePay(cantPay){return{realized:true,quantity: cantPay
}}}classPayPalextendsPay{constructor(email){super();this.email= email;}makePay(cantPay){return{realized:true,quantity: cantPay,platform:"PayPal",email:this.email}}}classCardextendsPay{constructor(card){super();this.card= card;}makePay(cantPay){if(this.card.length!=16){thrownewError("Invalido, debe de tener 16 digitos la tarjeta para validar el pago.");}else{const finishCard =this.card.slice(-4);return{realized:true,quantity: cantPay,lastCardNumbers:`${finishCard}`}}}}classCashextendsPay{makePay(cantPay){return{realized:true,quantity: cantPay
}}}
Desafio completo!
🛡️🛡️🛡️Escudo anti spoilers🛡️🛡️🛡️
Implementa un sistema de pagos usando polimorfismo
!Spoiler Shield
Pay.class.js
exportclassPay{// Tu código aquí 👈makePay(quantity){return{realized:true, quantity };}}
Cash.class.js
exportclassCashextendsPay{// Tu código aquí 👈}
Card.class.js
exportclassCardextendsPay{constructor(cardNumber){super();this.cardNumber= cardNumber;}// Tu código aquí 👈makePay(quantity){if(this.cardNumber.length!=16){thrownewError("Invalid Card Number");}else{return{...super.makePay(quantity),lastCardNumbers:this.cardNumber.substr(12),};}}}
PayPal.class.js
exportclassPayPalextendsPay{// Tu código aquí 👈constructor(email){super();this.email= email;}makePay(quantity){return{...super.makePay(quantity),platform:"Paypal",email:this.email,};}}
exercise.js
exportfunctionprocessPay(method, quantity){// Tu código aquí 👈return method.makePay(quantity);}
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(cardNumber){super()this.cardNumber= cardNumber
}makePay(amount){if(this.cardNumber.length!==16)thrownewError('El número de tarjeta debe ser de 16 dígitos')return{...super.makePay(amount),lastCardNumbers:this.cardNumber.substring(12)}}}
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{ card;constructor(cardNumber){super();this.card= cardNumber;}makePay(cantPay){if(this.card.length===16){return{...super.makePay(cantPay),lastCardNumbers:this.card.toString().substr(-4)}}else{thrownewError('La tarjeta no tiene la longitud')}}}
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(numberCard){super();this.numberCard= numberCard;}makePay(cantidadAPagar){if(this.numberCard===undefined||this.numberCard.length!==16){thrownewError("Numero de Tarjeta invalida");}const result =super.makePay(cantidadAPagar); result.lastCardNumbers=this.numberCard.slice(-4);return result;}}
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(cardNumber){super();this.cardNumber= cardNumber;}makePay(quantity){if(this.cardNumber.length!=16){thrownewError("Número de tarjeta inválida.")}else{return{...super.makePay(quantity),lastCardNumbers:this.cardNumber.substring(12,17)}}}}
Mi solución:
Nota: Casi muero porque en PayPal.class.js tenia escrito "Paypal" en lugar de "PayPal" con la segunda P también en mayus.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Card.class.js
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(cardNumber){super();this.cardNumber= cardNumber;}makePay(quantity){if(this.cardNumber.length!=16){thrownewError("La tarjeta no cumple con tener 16 digitos")}else{return{...super.makePay(quantity),lastCardNumbers:this.cardNumber.slice(-4)}}}}
classPay{makePay(quantity){return{realized:true,quantity:`$${quantity}`,};}}classCardextendsPay{constructor(cardNumber){super();this.cardNumber= cardNumber;}makePay(quantity){if(!this.cardNumber.length==16){returnnewError("Card number must be 16 characters");}return{...super.makePay(quantity),lastCardNumbers:this.cardNumber.slice(-4),};}}classCashextendsPay{constructor(){super();}}classPayPalextendsPay{constructor(email){super();this.email= email;}makePay(quantity){return{...super.makePay(quantity),platform:"Paypal",email:this.email,};}}functionprocessPay(method, quantity){// Tu código aquí 👈console.log(method.makePay(quantity));return method.makePay(quantity);}
exportclassCardextendsPay{constructor(lastCardNumbers){super()this.lastCardNumbers= lastCardNumbers
}makePay(quantity){if(this.lastCardNumbers.length===16){return{...super.makePay(quantity),lastCardNumbers:this.lastCardNumbers.substring(this.lastCardNumbers.length-4)}}else{thrownewError("Error en el número de tarjeta");}}}
exportclassPay{// Tu código aquí 👈constructor(){this.realized=true;}makePay(quantity){return{realized:this.realized,quantity: quantity
}}}
PayPal.class.js
import{Pay}from"./Pay.class.js";exportclassPayPalextendsPay{// Tu código aquí 👈constructor(email){super();this.email= email;}makePay(quantity){return{...super.makePay(quantity),platform:"PayPal",email:this.email}}}
Card.class.js
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{// Tu código aquí 👈constructor(cardNumber){super();this.cardNumber= cardNumber;}makePay(quantity){if(this.cardNumber.length!==16)thrownewError("El numero de la tajeta no tiene 16 digitos");return{...super.makePay(quantity),lastCardNumbers:this.cardNumber.slice(-4)}}}
Cash.class.js
import{Pay}from"./Pay.class.js";exportclassCashextendsPay{// Tu código aquí 👈}
exercise.js
exportfunctionprocessPay(method, quantity){// Tu código aquí 👈return method.makePay(quantity);}
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{constructor(cardNumber){super()this.cardNumber= cardNumber
}makePay(quantity){if(this.cardNumber.length!=16)thrownewError('El número de la tarjeta es erróneo')returnObject.assign({},{'lastCardNumbers':this.cardNumber.slice(12,16)},super.makePay(quantity))}}
!placeholder
import{Pay}from"./Pay.class.js";exportclassCardextendsPay{// Tu código aquí 👈constructor(card){if(card.length!==16)throwsuper(newError("Invalid Card"))super({lastCardNumbers: card.substr(12)})}}
import{Pay}from"./Pay.class.js";exportclassCashextendsPay{// Tu código aquí 👈}
exportclassPay{// Tu código aquí 👈constructor(payload){this._payload= payload
}makePay(quantity){return{realized:true, quantity,...this._payload}}}
import{Pay}from"./Pay.class.js";exportclassPayPalextendsPay{// Tu código aquí 👈constructor(email){super({platform:"PayPal", email,})}}
exportfunctionprocessPay(method, quantity){// Tu código aquí 👈return method.makePay(quantity)}
Ojo que al retornar el objeto de Card la propiedad lastCardNumber en el test lo recibe en plural lastCardNumbers.