`this` context in JavaScript
March 09, 2018
Default
By default, this is bound to the global context.
function foo(a) {this.a = a;}foo(2);console.log(this.a); // 2
Constructor
Constructor functions, that is functions called with new keyword, have this bound to the new object being constructed.
function Foo(a) {this.a = a;}const bar = new Foo(2);console.log(bar.a); // 2
Implicit
When a function is called as a method of an object, its this is bound to that object.
function foo(a) {this.a = a;}const bar = {foo: foo};bar.foo(2);console.log(bar.a); // 2
const baz = bar.foo;baz(4);console.log(bar.a); // 2console.log(this.a); // 4
Explicit
A function can be explicitly bound to a context using bind.
function foo(a) {this.a = a;}const bar = {};const boundFoo = foo.bind(bar);boundFoo(2);console.log(bar.a); // 2
Arrow Syntax
this is bound to the context where the arrow function was defined. This is the most consistent approach and thus preferred.
const foo = a => {this.a = a;};const bar = {foo: foo};bar.foo(2);console.log(bar.a); // undefinedconsole.log(this.a); // 2