构造此对象的最佳方法是什么?

时间:2017-07-20 18:05:16

标签: javascript arrays object constructor

我有一个对象,比如“汽车”:

function car(name, speed, options){
  this.name = name;
  this.speed = speed;
  this.options = options;
}

会有多个“选项”,所以我想把它传递给一个数组:

var carMustang = new car("Mustang", 250, ["Cruise Control","Air Conditioning", "ABS"]);

这不起作用,因为将数组传递给函数需要以不同的方式完成,就像我一直在阅读的那样。

但我真正的问题是:这是构建这些对象的有效方法吗?如果你必须将多个属性传递给一个对象,并且会有很多对象,你会怎么做呢?

奖励:如果您可以通过将数组信息传递给对象构造函数来解决我的问题,我将永远感激不尽。

由于

3 个答案:

答案 0 :(得分:0)

class Car {
    constructor(_name, _speed, _options){
        this.name = _name;
        this.speed = _speed;
        this.options = _options;
    }

    addToOptions (newOption) {
        this.options.push(newOption);
    }
}

var car = new Car('mustang', 250, [1, 2, '3']);

console.log(car);

car.addToOptions('AC');

console.log(car);

答案 1 :(得分:0)

如果您有很多选项,可以考虑创建某种对象来存储它们,然后将该对象作为参数传递。该对象可能只有每个可能选项的属性,然后将它们设置为true或false,以确定此车是否具有该选项。 就数组的传递而言,考虑到当数组通过函数时,它会衰减到指向该数组的指针。这意味着如果您将其作为参数传递,然后稍后在函数外部更改该数组的值,它也将更改函数中的值。

答案 2 :(得分:0)

在es6中,您可以模拟命名参数。如果你愿意,可以默认它们。当它的3个论点真的没关系。我的观点是它的许多论点。您通过它们的顺序与此方法无关。如果你想传递可选参数,那么当参数的顺序无关紧要时,它会更容易。我认为这是一个干净的方式。至少是es6的方式。

function Car({ name, speed = 50, options }){
  this.name = name;
  this.speed = speed;
  this.options = options;
}

const car = new Car({ speed: 100, name: 'Volvo' });

//Car { name: 'Volvo', speed: 100, options: undefined }
console.log(car)

Pre es6

function Car(config){
  this.name = config.name;
  this.speed = config.speed || 50;
  this.options = config.options;
}

const car = new Car({ speed: 100, name: 'Volvo' });

//Car { name: 'Volvo', speed: 100, options: undefined }
console.log(car)

假设您希望d和e在下面的函数中是可选的。然后你需要将它们放在最后或传递null / undefined / whatever_you_prefer

function Car(a, b, c, d, e) {

}