Нужны ли прототипы в JavaScript, когда у нас есть замыкания? - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю веб-разработчиком 3 года.Я очень редко создавал свои собственные прототипы для объектов (наверное, я также создавал прототипы с помощью нового синтаксиса класса ES 6).

Всякий раз, когда я могу что-то сделать с прототипом:

function Client(host, port) {
    this.host = host;
    this.port = port;
}

Client.prototype.httpRequestHelper = function(body) {
    ...
};

var client = new Client('http://127.0.0.1', 8801);

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

function createClient(host, port) {
    function httpRequestHelper(body) {
        ...
    }

    return {
        httpRequestHelper
    }
}

var client = createClient('http://127.0.0.1', 8801);

Каковы преимущества использования прототипов (и классов ES6) по сравнению с замыканиями?Зачем они нужны?

1 Ответ

0 голосов
/ 23 ноября 2018

Что ж, с замыканиями вы теряете способность «прятаться» от свойств или применять встроенные в Javascript средства самоанализа (instanceof, isPrototypeOf).Кроме того, свободные переменные замыкания отличаются от свойств объекта тем, что они не видны в окружающей области видимости.Конечно, вы можете определить геттеры и сеттеры для доступа к ним, но это немного неловко, и вы все еще не можете использовать деструктурирующие присваивания и, возможно, другие основные концепции языка.

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

...