Давайте посмотрим на этом примере:Смешение области применения и сами вызовов в JavaScript
var x = 3;
var obj = {
x:2,
test: function(){
var x = 1;
console.log(this.x);
}
};
И тогда у нас есть различные способы для вызова этой функции:
obj.test(); // line 1
obj.test.call(null); // line 2
(obj.test)(); // line 3
(obj.test = obj.test)(); // line 4
(obj.test || obj.test)(); // line 5
(obj.test && obj.test)(); // line 6
(obj.test, obj.test)(); // line 7
Я понимаю, первые 3 строки, но может кто-нибудь объяснить, меня то, что происходит дальше (строки с 4 по 7). Это сбивает с толку.
Короче говоря, «это» не связан с буквальным сферы (объекта OBJ), но устанавливается динамически. Поэтому для управления контекстом и управления «этим» функции можно использовать .call (контекст, параметры) или .apply (context, parametersarray). Использование «этого», как он используется в вашем примере, не является предпочтительным и неоднозначным. Попробуйте явно ссылаться на объект. – Andries