В языке С++, на котором мне больше всего нравится, обычно объявляется такой объект:
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
, локальной переменной. Может ли кто-нибудь сказать, почему именно это, с точки зрения области видимости и объектов, и если есть другой способ определить объект, где это не нужно?