Классы и массивы как параметры - PullRequest
0 голосов
/ 11 апреля 2019

Я создаю класс с именем Vehicle и подкласс с именем Tesla.Оба класса получают массив как внутри параметра конструктора.Я не был уверен, должен ли я использовать оператор распространения в этом случае.У меня вопрос, как мне извлечь значения из массивов и установить их в качестве свойств для отдельных классов?

Я пытался использовать оператор распространения и индексации, но у меня это не сработало.

  class Vehicle{
    constructor(...args){ 
        let arr = Array.from(args)

        this.wheelTotal = arr[0]
        this.energySource = arr[1]
        this.manufacturer = arr[2]
        this.isOn = false
  }

  getSpec(key){
         if(this.hasOwnProperty(key)){
      return this[key]
    }
  }
 }

class Tesla extends Vehicle{
  constructor(...args){
  let arr2 = Array.from(...args)
  super(...args);
              this.milesPerCharge = arr2[0]
      this.model = arr2[1]
      this.chargePercentage = arr2[2]

  }
  minutesToFullCharge(){
      return 100 - this.chargePercentage
  }
}


describe('Tesla', () => {
let teslaCar;

beforeEach(() => {
  teslaCar = new Tesla([300, 'Model S', 50, 100, [[4, 'electric', 'Tesla']]]);    
});

it('should have properties specific to a Tesla such as MPC (miles per charge) and Model', () => {
  expect(teslaCar.milesPerCharge).toBe(300);
  expect(teslaCar.model).toBe('Model S');
  expect(teslaCar.chargePercentage).toBe(50); // 50% charged
  expect(teslaCar.minutesToCharge).toBe(100); // 100 minutes for a full charge
});

it('should have all properties of a Vehicle instance', () => {
  expect(teslaCar.wheelTotal).toBe(4);
  expect(teslaCar.energySource).toBe('electric');
  expect(teslaCar.manufacturer).toBe('Tesla');
  expect(teslaCar.getSpec('wheelTotal')).toBe(4);
});

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

solution code tested in repl.it

Был в состоянии назначить свойства, поместив параметры в скобках для обозначения массива.Я сделал то же самое для подкласса.

0 голосов
/ 11 апреля 2019

Если вы передадите им массивы аргументов, вам не нужно делать с этим ничего особенного. Just

  class Vehicle{
    constructor(arr) { 
        this.wheelTotal = arr[0];
        this.energySource = arr[1]; // etc.
  }

Вот и все.

Хотя, честно говоря, я не вижу привлекательности этой модели. Просто назовите аргументы: constructor(wheelTotal, energySource, manufacturer) {//.... Или используйте объект конфигурации, который помогает поддерживать порядок с произвольным количеством (потенциально необязательных) параметров: constructor({ wheelTotal, energySource, manufacturer }) {//...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...