В Javascript, почему мы используем функции для создания объектов? - PullRequest
3 голосов
/ 15 января 2020

Проходя некоторые базовые c уроки по созданию объектов в javascript .info.

Я пытаюсь выбрать asp при выборе способа создания объектов. Потому что есть так много способов сделать это. Кроме того, почему мы используем функции для создания объектов? И почему мы используем функции конструктора для создания объектов, когда мы можем обойтись без него? В какой ситуации один способ предпочтительнее другого?

Вот три способа:

1:

let name = "bob";
let age = 24;

let user = {
  name: name,
  age: age,
}

alert(user.name);

2:

function obj(name, age) {
return {
  name: name,
  age: age,
};
}

let user = obj("bob", 24);

alert(user.name);

3 :


function User(name, age) {
    this.name = name;
  this.age = age;
}

let user = new User("bob", "24")

alert(user.age);

разве коды от 2 и 3 практически не служат одной и той же цели создания объекта чертежа? спасибо.

Ответы [ 4 ]

2 голосов
/ 15 января 2020

1 и 2 создают один и тот же объект, который является экземпляром Object. 3 создает объект, который является экземпляром, если User, а также Object. Используя метод 3, вы можете получить достижение Inheritance или, по крайней мере, добавить общие свойства и методы ко всем экземплярам этого класса / функции (Пользователь). например,

function User(name, age) {
    this.name = name;
  this.age = age;
}

User.prototype.showDetails = function () {
  console.log(`Name: ${this.name}\nAge: E${this.age}`);
}

let user1 = new User("Bob", "24");
let user2 = new User("John", "25");

console.log(user1.showDetails());
console.log(user2.showDetails());
1 голос
/ 15 января 2020

Вариант 1 создает простой объект. Это разумный подход, если вы просто хотите сохранить несколько пар ключ / данные.

Опция 2 позволяет создавать множество похожих объектов с небольшими изменениями в данных.

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

Подход варианта 3 заменен синтаксис класса .

0 голосов
/ 15 января 2020

Разница между 1 и 2 незначительна.

Число 1 - это объект, который вы строите с использованием синтаксиса {}. Номер два - это функция, которая возвращает объект, созданный вами с использованием синтаксиса {}. Функция здесь не является частью процесса, она просто возвращает простое значение, объект.

ВСЕ - это объект в javascript. Не на самом деле, но в основном. Массивы - это объекты, эти пары ключ-значение, которые вы создали, являются объектом (и каждое значение в вашем объекте также может быть установлено как объект). Строки - это объекты, ФУНКЦИИ - это объекты. Каждый не примитивный тип данных является объектом.

Номер 3 - это класс. Все еще объект, но со свойствами класса, включая наличие конструктора. Объект - это просто значение и структура данных без явной типизации.

0 голосов
/ 15 января 2020

Ваши варианты 2 и 3 больше похожи на создание класса, чем на объект

Проблема в том, что javascript только недавно начал определять такие вещи, как классы и объекты и экземпляры объектов.

Для Ваше удовольствие, вот способ номер 4

class User{
  constructor (name, age) {
    this.name = name
    this.age = age
  }
}

let user = new User("bob", "24")

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

class Person{
   constructor (gender) {
     this.gender=gender
   }
}
class User extends Person{
  constructor (name, age, gender) {
    super(gender)
    this.name = name
    this.age = age
  }
}

let user = new User("bob", "24", 'male')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...