В javascript ключевое слово this
установлено для владельца функции. Объекты-функции сами не сохраняют свое право собственности, вместо этого право собственности определяется из способа, которым мы вызываем функцию.
например:
var foo = function() {
alert('hello');
};
var abc = {};
abc.bar = foo;
Просто вызывая функцию как
foo();
не дает интерпретатору понятия о том, к какому объекту может быть прикреплена функция. Он может быть присоединен к нескольким объектам, это может быть переменная и т. Д. Поэтому интерпретатор устанавливает this
для глобального объекта.
Но, тем не менее, при вызове такой функции, как
abc.bar();
интерпретатор знает, что функция прикреплена к abc
объекту, поэтому this
имеет значение abc
. Даже если bar
и foo
относятся к одному и тому же функциональному объекту, различие в шаблоне вызова приводит к тому, что this
ведет себя по-разному.