sp
и stk
не являются переменными, они свойства объекта. И свойства должны быть доступны относительно конкретного объекта.
Вы можете изменить функцию для использования stack_1.sp
и stack_1.stk
, чтобы получить доступ к свойствам этого объекта.
Или вы можете использовать this.sp
и this.stk
. Когда вы используете this
, вы должны вызвать функцию как stack_1.push()
, потому что специальная переменная this
устанавливается автоматически только при вызове функции относительно определенного объекта.
Это может показаться излишним для вашего простого случая, но имеет смысл, когда вы используете прототипы или наследование. В этом случае несколько объектов могут совместно использовать одну и ту же функцию, и ей нужно знать, к какому объекту работать. Механизм установки this
во всех случаях одинаковый.
'this' зависит от того, как функция вызываемый, а не там, где он определен. – Tushar
Вот как работает javascript - в отличие от C#, например, он не «предполагает», что вы хотите использовать этот контекст для всего, к чему вы обращаетесь. –
Пока переменная находится в локальной области, нет необходимости использовать 'this.variable ', если, конечно, не существует одинаково названной переменной вне объекта, но доступной изнутри объекта. – Defiant