У меня есть класс, в котором есть метод, использующий this. Я «обновил» экземпляр этого объекта и передал его метод переменной в глобальном контексте. Если я затем вызову свою глобальную функцию this, она не будет определена.
class Tests {
logThis() {
console.log(this);
}
}
const globalFunc = new Test().logThis;
globalFunc(); // undefined
Теперь, если бы я только что использовал литерал объекта, тогда this является глобальным.
const someObject= {
logThis2: function() {console.log(this)}
}
const globalFunc2 = someObject.logThis2;
globalFunc2(); // global object
В обоих случаях глобальный объект владеет кодом и должен предоставлять this в контексте выполнения globalFunc. Итак, почему разница в this для метода, сгенерированного классом?
"use strict";. В строгом режимеthisявляетсяundefinedвместо глобального объекта, если он не указан. - person Paul   schedule 07.07.2019thisтакже привязанным к методу. - person cham   schedule 07.07.2019thisв целом: stackoverflow.com/questions/3127429/ . функции не получают привязку к нимthis.thisопределяется во время вызова функции, а не при определении функции.x.foo()вызывает функциюx.fooс помощьюthis === x.var y = { bar: x.foo }; y.bar( );звонитx.fooсthis === y. Принимая во внимание, чтоvar z = x.foo; z( );вызываетx.fooбезthis, что приведет к тому, что он будетundefinedв строгом режиме, но по причинам наследия/bc он будет глобальным объектом в нестрогом режиме. - person Paul   schedule 07.07.2019logThisпрямым свойством в конструкторе класса, чтобы делать то, что вы хотите.constructor(){ this.logThis = this.logThis.bind(this) }- person charlietfl   schedule 07.07.2019