@Ivanushka255

В чем преимущество функций-конструкторов?

Такой вопрос. Чем конкретно этот код ...
function Func(name) {
    this.name = name;
    this.age = 25;
    this.city = 'New York';
}
let a = new Func('Victoria');


..отличается от этого?
function func(name) {
    return {
        name: name,
        age: 25,
        city: 'New York'
    }
}
let a = func('Victoria');

В чем преимущество функции-конструктора?
Пишется, что:
...удобное повторное создание однотипных объектов. В то время как обычный синтаксис {...} (литерал объекта) позволяет создать только один объект.
Таким образом функция-конструктор позволяет избавиться от проблемы дублирования однотипного кода.


Но я также могу создать и с помощью обычной функции множество объектов. Например:
function func(name) {
    return {
        name: name,
        age: 25,
        city: 'New York'
    }
}
let a = func('Victoria');
let b = func('Jack');
let c = func('Ann');
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@antares4045
Разница в механике наследования: первый вариант можно унаследовать, и ему в прототип можно добавлять методы.

в первом случае, если вы захотите добавить метод, который выводит имя в консоль, то вам будет достаточно
написать
Func.prototype.printName = function(){
  console.log(this.name)
}


и затем можете обращаться к методу
a.printName() // выведет в консоль Victoria
При всём при том, не зависимо от того, сколько экземпляров класса Func вы наплодите метод printName в памяти будет храниться один.

Во втором случае вы также при помощи несложных манипуляций сможете добиться похожего поведения, но там всегда будут подводные камни, например скорее всего у вас не получится создать наследника для func
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы