Когда использовать это в JavaScript OO? - PullRequest
8 голосов
/ 17 июля 2009

В Javascript OO, когда мне следует использовать ключевое слово this?

Кроме того, если я хочу вызвать метод класса из другого метода того же класса, я должен использовать this или просто имя функции? Например, это правильно?

function Foo()
{
   this.bar= function()
   {
      alert('bar');
   }

   this.baz= function()
   {
     this.bar(); //should I use this.bar() or just bar()?
   }
}

Ответы [ 6 ]

6 голосов
/ 17 июля 2009

Когда дело доходит до «объектно-ориентированного» JavaScript, вот замечательное руководство Марка Дикинсона, здесь, на SO, связанное с: Private Members in JavaScript . В нем подробно рассматриваются некоторые другие вещи, которые вам сейчас не нужны, но как только вы поймете, как работает JavaScript, вы увидите, что он сильно отличается от вашего обычного объектно-ориентированного языка, когда дело доходит до таких вещей, как this действительно значит.

Я бы сказал, что в вашем случае вам определенно следует использовать this, но, возможно, ваши функции должны быть в prototype части вашего "класса" (это позволяет избежать переопределения функции при каждом создании нового экземпляра). .)

1 голос
/ 19 июля 2009
0 голосов
/ 22 июля 2009

В другом посте о «псевдонимах функций» в JavaScript я подробно объяснил, с примерами, как это работает в JavaScript. Я думаю, что это может быть полезно для вас.

Пожалуйста, проверьте: Псевдоним функции JavaScript не работает

0 голосов
/ 19 июля 2009

Правильная версия - это та, которая не выдает ошибку при попытке вызвать функцию. Если вы пропустите this, вы получите исключение ReferenceError.

0 голосов
/ 17 июля 2009

Просто чтобы подчеркнуть и сопереживать предыдущему ответу @ tj111, я предлагаю вам прочитать это . Чтобы лучше понять область видимости функции.

0 голосов
/ 17 июля 2009

В данном конкретном случае лучше всего использовать переменную с собственной ссылкой вместо this, чтобы избежать путаницы и головной боли внутри функций.

function Foo()
{
   var self = this;

   this.bar= function()
   {
      alert('bar');
   }

   this.baz= function()
   {
     self.bar();
   }
}

Причина этого в том, что, поскольку все в javascript является объектом, ключевое слово this внутри функции относится к родительской функции. Определяя переменную в определенной области, вы гарантируете, что переменная сохранит свою область.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...