2016-02-02 2 views
0

Я читаю эту книгу, и, конечно, с помощью конструктора было бы лучше при создании большего количества объектов, и мне было сказано меньше вводить текст, но затем до конца главы он дает еще один вариант для создания объекта, который на самом деле требует много ввода текста и заставляет меня чувствовать, что просто делает объект литералом по-другому.Этот способ создать объект действительно лучше? (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."); 
     } 
    } 
} 

Создание нового автомобиля объектов

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); 

Как я понимаю, что происходит, и как это работает, но второе - действительно намного лучше и опрятно, чем первое? Я знаю, что второй не нужно заботиться о том, чтобы ввести параметры в неправильном порядке, но гораздо больше работ

+0

проще изменить объект, чем изменять параметры и аргументы, и убедиться, что все они в правильном порядке – charlietfl

+2

«Лучше в глаза разработчику» (c) – raina77ow

ответ

3

Оба метода хороши. «Хорошее» означает «наличие качеств, необходимых для определенной роли». согласно google. Если это соответствует вашим потребностям, это хорошо.

Однако некоторые способы делать вещи обычно расходятся большинством сообщества программирования как неявные (нечитаемые) или взломанные. Эти два метода, которые вы описали, не являются хакерскими или неявными, они просто удовлетворяют различные потребности.

Метод 1:

  • менее читаемым

  • Это потенциально может быть проще перепутать переменные, и не является очевидным для кого-то Просмотрев Ваш код.

  • Это намного короче

Лично я думаю, что для простых объектов с несколькими атрибутами, первый метод является наиболее подходящим.

Метод 2:

  • вполне читаемым

  • Возможно труднее перепутать переменные, и немного более очевидным для кого-то Просмотрев Ваш код.

  • Это немного больше

С более сложными объектами, такими как автомобиль, вы можете использовать второй метод, так как он более четко и ценности могут быть в порядке, не нарушая ничего.

Также рассмотреть добавление значения по умолчанию, выполнив таким образом: this.model = params.model || ”default model if params.model is undefined”;

1

Оба метода вполне допустимы. Я бы сказал, что более важно быть последовательным в том, что вы делаете. Если вы создаете объекты с использованием обеих методологий (объекты параметров и пучок переменных, передаваемых в заголовке), то это неряшливый код. Это похоже на «vs» в JS. Оба они делают по сути одно и то же, самое главное, что вы согласуетесь в своем коде, которым вы пользуетесь.