这种创建对象的方式真的更好吗? (JavaScript的)

时间:2016-02-02 17:46:55

标签: javascript object params

我已经阅读了这本书,当然通过使用构造函数会更好,同时创建更多的对象,并被告知更少的输入,但然后到本章的结尾,它提供了另一个选项来创建一个实际上需要大量输入的对象并且让我觉得只是以不同的方式制作一个对象文字。

比方说一个汽车对象:

function Car(make, model, year, color, passengers, convertible, mileage){
    this.make = make;
    this.model = model;
    this.year = year;
    this.color = color;
    this.passengers = passengers;
    this.convertible = convertible;
    this.mileage = mileage;
    this.started = false;
    this.start = function(){
        this.started = true;
    };
    this.stop = function(){
        this.started = false;
    };
    this.drive = function(){
        if(this.started){
            console.log(this.make + " " + this.model + " goes zoom zoom!");
        }else{
            console.log("Start the engine first.");
        }
    }
}

创建新的Car对象

var chevy = new Car("Chevy", "Bel Air", 1957, "red", 2, false, 1021);
var cadi = new Car("GM", "Cadillac", 1955, "tan", 5, false, 12892);
var taxi = new Car("Webville Motors", "Taxi", 1955, "yellow", 4, false, 281341);
var fiat = new Car("Fiat", "500", 1957, "Medium Blue", 2, false, 88000);
var testCar = new Car("Webville Motors", "Test Car", 2014, "marine", 2, true, 21)

我可以理解上面的所有内容,但是这本书建议更好,另一种需要更多输入的方法是将这些参数存储到另一个变量中并像这样更改构造函数

function Car(params){
    this.make = params.make;
    this.model = params.model;
    this.year = params.year;
    this.color = params.color;
    this.passengers = params.passengers;
    this.convertible = params.convertible;
    this.mileage = params.mileage;
    this.started = false;
    this.start = function(){
        this.started = true;
    };
    this.stop = function(){
        this.started = false;
    };
    this.drive = function(){
        if(this.started){
            console.log(this.make + " " + this.model + " goes zoom zoom!");
        }else{
            console.log("Start the engine first.");
        }
    }
}

var chevyParam = {
    make: "Chevy",
    model: "Bel Air",
    year: 1957,
    color: "red",
    passengers: 2,
    convertible: false,
    mileage: 1021
}

var chevy = new Car(chevyParam);

就像我理解发生了什么以及它是如何工作的但是第二个真的比第一个更好更整洁?我知道第二个人不必在意如果以错误的顺序输入参数,而是更多的工作

2 个答案:

答案 0 :(得分:3)

两种方法都很好。 '好'意味着具有特定角色所需的品质。"根据谷歌。如果它符合您的需求,那就很好。

然而,大多数编程社区通常认为某些做事方法是无法识别的(不可读的)或hacky。你描述的这两种方法既不是hacky也不是不明确的,它们只是满足不同的需求。

方法1:

  • 不太可读

  • 混合变量可能会更容易,对于审核代码的人来说并不明显。

  • 它短得多

我个人认为对于属性很少的简单对象,第一种方法是最合适的。

方法2:

  • 相当可读

  • 混淆变量可能比较困难,而且对于审核代码的人来说更为明显。

  • 它有点长

对于更复杂的对象,例如汽车,您可能希望使用第二种方法,因为它更明确,并且值可能出现故障而不会破坏任何内容。

同时考虑添加默认值:this.model = params.model || ”default model if params.model is undefined”;

答案 1 :(得分:1)

这两种方法都完全有效。我要说的是,在你正在做的事情上保持一致更为重要。如果你使用两种方法(参数对象和标题中传递的一堆变量)制作对象,那么这就是邋code的代码。它有点像' vs"在JS中。它们基本上都是一样的,最重要的是你在使用的代码中保持一致。