Реализация частных переменных экземпляра в Javascript

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

Я думал, что следую лучшим практикам, реализованным в некоторых из лучших библиотек, но, похоже, я что-то упустил.

var Printer = (function(){
    var _word;

    Printer = function(word){
        _word = word;
    }

    _print = function(){
        console.log(_word);
    }

    Printer.prototype = {
        print: _print
    }
    return Printer;
})();

var a = new Printer("Alex");
var b = new Printer("Bob");

a.print(); //Prints Bob (!)
b.print(); //Prints Bob

Я просмотрел этот пост, но в нем не описана передовая практика реализации частных переменных экземпляра. (это даже название того, что я хочу?) Метод и переменная область видимости частных переменных и переменных экземпляра в JavaScript

Я также просматривал этот пост, но использовал ключевое слово «this» — это то, что я делал раньше. Поскольку это не запутывает, я пытался этого избежать. Это действительно единственный способ? Реализация методов/переменных экземпляра в прототипном наследовании

21
задан Community 23 May 2017 в 11:46
поделиться