# this keyword in JavaScript

## What is `this`?
### JS is an OOP Language
#### this => Always refers to some object
#### method => A function defined inside an object (a function executed with .methodName())
#### function => All functions that are not methods

### Cases where this is NOT window when defining function() {}
1. #### this inside a method -> The object where the method is defined 2. #### this inside a constructor function
*When defining a method, you must always define it with function(){}!*
ex) ```javascript const obj = { name: 'obj', method1: function(){ console.log(this) // this = obj }, objInObj: { name: 'oio', oioMethod(){ // ES6 Syntactic sugar: makes code short and easy to write! Allows defining functions this short way! console.log(this) // this = objInObj } }, arr: [0, 1, 2], newArr: [], method2 () { /* this.arr.forEach( // This is NOT a method! It's just an anonymous function I created // -> cannot use this function(number){ this.newArr.push(number*100) }.bind(this) // Can use it by binding! // -> But are you going to write this long...? // => The arrow function was created because of this! )//obj */ (number) => { this.newArr.push(number * 100) } } } ```

The subject that called the eventListener becomes `this`! - It is passive! - Changes depending on who called it