Добавление параметров функции в пустой массив - PullRequest
0 голосов
/ 10 октября 2018

У меня есть функция вместе с экземпляром, созданным с использованием «new»:

function Cars (model, color, year) {
this.model = model;
this.color = color;
this.year = year;
this.allCars = [];

}

var bmw = new Cars('z4', 'white', 2010),
    benz = new Cars('cl', 'black', 2011),
    ford = new Cars('mustang', 'red', 2015),
    audi = new Cars('s3', 'yellow', 2013),
    fiat= new Cars('fat boy', 'purple', 2020);


Cars.prototype.addCars = function (data) {
for(let i=0; i<3; i++){
   this.allCars.push(data);
  return this.allCars;  
}
}

console.log(benz.addCars(bmw,audi,fiat));
console.log(benz.addCars(ford));

Я пытался создать функцию с именем «addCars», чтобы всякий раз, когда я назначал ей экземпляр,как benz.addCars (x1, x2, x3, ...), я мог бы получить массив машин, упомянутых в качестве параметров. Например,

, я ожидал бы получить следующий результаткогда я вызываю

console.log(benz.addCars(bmw,audi,fiat))
// expected result: ['bmw','audi',fiat']

и следующий результат для одного экземпляра параметра:

console.log(benz.addCars(ford));
//expected result: ['ford']

Мне просто интересно, как я могу заполнить этот массив с помощью функции addCard.веселит

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Пожалуйста, попробуйте следующий метод / ответ.

function Cars (model, color, year) {
this.model = model;
this.color = color;
this.year = year;
this.allCars = [];

}

var bmw = new Cars('z4', 'white', 2010),
   benz = new Cars('cl', 'black', 2011),
   ford = new Cars('mustang', 'red', 2015),
   audi = new Cars('s3', 'yellow', 2013),
   fiat= new Cars('fat boy', 'purple', 2020);


Cars.prototype.addCars = function (data) {
   for(var i = 0; i < arguments.length; i++) {
     this.allCars.push(arguments[i]);
   }
  return this.allCars;  
}

 console.log(benz.addCars(bmw,audi,fiat));
 console.log(benz.addCars(ford));
0 голосов
/ 10 октября 2018

Вы могли бы также рассмотреть возможность использования настройки класса следующим образом:

class Car {
  constructor(brand, model, color, year) {
    this._brand = brand
    this._model = model
    this._color = color
    this._year = year
  }
  get brand() {
    return this._brand
  }
}

class Cars {
  constructor(cars = []) {
    this._cars = cars
  }
  addCars(cars) {
    cars.forEach(c => this._cars.push(c))
  }
  getBrands() {
    return this._cars.map(x => x.brand)
  }
}

let cars = new Cars([
  new Car('BMW', 'z4', 'white', 2010),
  new Car('Mercedes', 'cl', 'black', 2011),
  new Car('Ford', 'mustang', 'red', 2015),
  new Car('Audi', 's3', 'yellow', 2013),
  new Car('Fiat', 'fat boy', 'purple', 2020)
])

console.log(cars.getBrands())

Где вы можете использовать геттеры / сеттеры ES6 и т. Д.

Вот еще один способ сделать это с вашей установкой:

function Cars(brand, model, color, year) {
  this.brand = brand;
  this.model = model;
  this.color = color;
  this.year = year;
  this.allCars = [];

}

var bmw = new Cars('BMW', 'z4', 'white', 2010),
  benz = new Cars('Mercedes', 'cl', 'black', 2011),
  ford = new Cars('Ford', 'mustang', 'red', 2015),
  audi = new Cars('Audi', 's3', 'yellow', 2013),
  fiat = new Cars('Fiat', 'fat boy', 'purple', 2020);


Cars.prototype.addCars = function(data) {
  if (Array.isArray(data)) {
    for (let i = 0; i < data.length; i++) {
      this.allCars.push(data[i]);
    }
    return data.map(x => x.brand)
  } else {
    this.allCars.push(data);
    return data.brand
  }
}

console.log(benz.addCars([bmw, audi, fiat]));
console.log(benz.addCars([ford]));
...