Не знаю, как я так долго этого не замечал. Я предполагал, что частные переменные экземпляра работают так, но это не так. Конечно, они частные (как и неглобальные), но переменные являются общими для всех экземпляров. Это привело к некоторым очень запутанным ошибкам.
Я думал, что следую лучшим практикам, реализованным в некоторых из лучших библиотек, но, похоже, я что-то упустил.
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» — это то, что я делал раньше. Поскольку это не запутывает, я пытался этого избежать. Это действительно единственный способ? Реализация методов/переменных экземпляра в прототипном наследовании