В javascript, как я могу сказать, к какому объекту привязана функция (то есть, к этому this), не вызывая ее? - PullRequest
1 голос
/ 14 ноября 2009

Кто-нибудь знает? Не удалось найти этот вопрос раньше, даже если он кажется довольно простым.

Ответы [ 2 ]

3 голосов
/ 14 ноября 2009

context (ключевое слово this) не полностью неявное , его можно установить и изменить явно .

Например:

function test () {
  alert(this);
}

test.call("Hello world");

Функция test вызывается со строкой в ​​качестве контекста.

Итак, в заключение, вы не можете знать, что такое this, если не определите его явно, или вы не находитесь внутри функции.

2 голосов
/ 15 ноября 2009

Одна и та же функция будет видеть различные значения this в зависимости от того, как она вызывается. Подробнее см. Крокфорд , но есть четыре случая:

  1. Вызывается как простая функция, она связана с глобальным / оконным объектом.
  2. Вызывается как метод для объекта, он ссылается на этот объект.
  3. Вызывается в качестве конструктора через ключевое слово new, это новый экземпляр объекта, который наследуется от объекта, хранящегося в собственном свойстве prototype функции.
  4. Вызывается собственным методом apply или call, это первый предоставленный аргумент.

Если эти случаи кажутся сложными, утомительными и подверженными ошибкам, это еще одна причина, чтобы не полагаться на this вне методов, где это все равно имеет смысл.

...