这种创建对象的方式真的更好吗? (javascript)
Is this way to create object really better? (javascript)
我读过这本书,当然在创建更多对象时使用构造函数会更好,并且被告知输入更少,但在本章末尾它提供了另一种创建对象的选项,这实际上需要很多打字让我觉得只是以不同的方式制作对象文字。
假设有一个汽车对象:
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);
好像我了解发生了什么以及它是如何工作的,但第二个真的比第一个更好更整洁吗?我知道第二个不必关心是否以错误的顺序输入参数但还有很多工作
两种方法都不错。 'Good' 根据 google 表示 "having the qualities required for a particular role."。如果能满足你的需求就好了。
然而,大多数编程社区通常不赞成某些做事方法不明确(不可读)或骇人听闻。你描述的这两种方法既不黑也不晦涩,它们只是迎合了不同的需求。
方法一:
可读性较差
可能更容易混淆变量,并且对于审查您的代码的人来说并不明显。
短多了
我个人认为对于属性少的简单对象,第一种方法是最合适的。
方法二:
相当可读
可以说更难混淆变量,而且对于审查您的代码的人来说更明显。
有点长
对于更复杂的对象,例如汽车,您可能希望使用第二种方法,因为它更明确并且值可以乱序而不会破坏任何东西。
同时考虑通过这样做添加默认值:this.model = params.model || ”default model if params.model is undefined”;
两种方法都完全有效。我要说的是,在你所做的事情上保持一致更为重要。如果您使用两种方法(参数 objects 和 header 中传递的一堆变量)制作 objects,那么这就是草率代码。这有点像 JS 中的 ' vs "。它们本质上做同样的事情,最重要的是你使用的代码是一致的。
我读过这本书,当然在创建更多对象时使用构造函数会更好,并且被告知输入更少,但在本章末尾它提供了另一种创建对象的选项,这实际上需要很多打字让我觉得只是以不同的方式制作对象文字。
假设有一个汽车对象:
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);
好像我了解发生了什么以及它是如何工作的,但第二个真的比第一个更好更整洁吗?我知道第二个不必关心是否以错误的顺序输入参数但还有很多工作
两种方法都不错。 'Good' 根据 google 表示 "having the qualities required for a particular role."。如果能满足你的需求就好了。
然而,大多数编程社区通常不赞成某些做事方法不明确(不可读)或骇人听闻。你描述的这两种方法既不黑也不晦涩,它们只是迎合了不同的需求。
方法一:
可读性较差
可能更容易混淆变量,并且对于审查您的代码的人来说并不明显。
短多了
我个人认为对于属性少的简单对象,第一种方法是最合适的。
方法二:
相当可读
可以说更难混淆变量,而且对于审查您的代码的人来说更明显。
有点长
对于更复杂的对象,例如汽车,您可能希望使用第二种方法,因为它更明确并且值可以乱序而不会破坏任何东西。
同时考虑通过这样做添加默认值:this.model = params.model || ”default model if params.model is undefined”;
两种方法都完全有效。我要说的是,在你所做的事情上保持一致更为重要。如果您使用两种方法(参数 objects 和 header 中传递的一堆变量)制作 objects,那么这就是草率代码。这有点像 JS 中的 ' vs "。它们本质上做同样的事情,最重要的是你使用的代码是一致的。