В языке С++, на котором мне больше всего нравится, обычно объявляется такой объект:
class foo
{
public:
int bar;
int getBar() { return bar; }
}
Вызов getBar() отлично работает (игнорируя тот факт, что bar может быть неинициализирован). Переменная bar внутри getBar() находится в области класса foo, поэтому мне не нужно говорить this->bar, если мне действительно не нужно четко указывать, что я имею в виду класс 'bar вместо, скажем, параметра.
Теперь я пытаюсь начать работу с ООП в Javascript. Итак, я ищу, как определить классы и попробовать такие же вещи:
function foo()
{
this.bar = 0;
this.getBar = function() { return bar; }
}
И это дает мне bar is undefined. Изменение bar на this.bar устраняет проблему, но для этого всякая переменная меняет код довольно немного. Это необходимо для каждой переменной? Поскольку я не могу найти никаких вопросов, связанных с этим, это заставляет меня чувствовать, что я делаю что-то принципиально неправильное.
EDIT: Правильно, поэтому из комментариев, что я получаю, является то, что this.bar, свойство объекта, ссылается на нечто, отличное от bar, локальной переменной. Может ли кто-нибудь сказать, почему именно это, с точки зрения области видимости и объектов, и если есть другой способ определить объект, где это не нужно?