Зачем мне использовать this, если есть замыкания?

Допустим у меня есть две функции, создающие объект:
// Функция №1
function square(_a, _b) {
    let a    = _a; 
    let b    = _b;
    let area = 0;
    let obj = {
        computeArea: function() {
            area = a * b;
        },
        getArea: function() { return area; },
        get a()       { return a;  },
        set a(value)  { a = value; },
        get b()       { return b;  },
        set b(value ) { b = value; }
    };
    return obj;
}

// Функция №2
function Square(a, b) {
    this.a = a;
    this.b = b;
    this.area = 0;
    this.computeArea = function() {
        this.area = this.a * this.b;
    };
}


Я понимаю, что второй вариант записан короче. Тем не менее, почему я должен использовать this? В чем минусы первого варианта?
  • Вопрос задан
  • 2244 просмотра
Пригласить эксперта
Ответы на вопрос 3
@majstar_Zubr
C++, C#, gamedev
Меньше кода - меньше ошибок;
Меньше кода быстрее писать;
Меньше кода проще понять;
Использование конструкций языка по их непосредственному назначению лучше выражают намерения;
Ответ написан
Комментировать
Xuxicheta
@Xuxicheta
инженер
В первом случае вы создали "приватные поля". Можно делать как угодно, но хранить данные в свойствах объекта просто удобнее и наглядее. И нет возможности случайно зацепить внешнюю переменную в замыкание, потом попробуй найди такое.
Ответ написан
Комментировать
mbelskiy
@mbelskiy
Software Developer
Первое что приходит в голову:
- при создании экземпляров объекта через замыкания теряются преимущества прототипного наследования (методы объявляются на экземпляре)
- теряется возможность идентификации экземпляра операцией `typeof`
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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