- Other data types are, or inherit, from either one of these. via prototypal inheritance, not classical inheritance.
 - Functions are also objects, but with an invocable code property { ๐, โฌ, โฌ }.
 - Classes are also objects { ๐ฆ, ๐ฅ, ๐ง }, and so are Arrays [ โฌ, โฌ, โฌ ].
 
- { โฌ, โฌ, โฌ console.log(this) } -> { โฌ, โฌ, โฌ }
 - Inside Class constructors, 'this' refers to an instance of that class
 - (i.e. from { ๐ฆ, ๐ฅ, ๐ง }-> the specific thing that it's constructing { ๐, ๐, ๐ }).
 - The value of 'this' also changes depending on how deeply nested you're using 'this' in an object.
 
- It depends on the function's execution context
 - 
Where th r u running me?? ๐ค - your function
 - Are you running it from inside another Object? what data type is it? -- or, ...
 
- 
i.e. If it sits directly on the global execution context,
 - 
then 'this' === the window object if you're in a browser.
 - 
Or if you're not running it in a browser, then โthisโ === whatever the global object is.
 - 
Inside a global function running in Node, 'this' === the 'global' object.
 - 
but if you want to, you can manipulate what 'this' refers to, by using .bind(), .call(), or .apply():
 
- .bind( )
- โbindโ / โforce it to useโ
 - Inside a React ClassComponent's constructor, we can write: this.๐ = this.๐.bind(this).
- and for that function, ๐, we've made sure that 'this' refers to an instance of that ClassComponent.
 
 - ๐.bind(this)
- 
"Whatever 'this' refers to at the lexical place you're sitting at. That's what you should use from now on ok? ๐ก But I'm not invoking you yet. ๐" - you to your function
 
 - 
 - for partial application of functions
- "partial" 'cause you haven't called or applied it yet.
 - i.e. giving your function args for it to use in the future
 
 
 - to actually bind args and invoke your function at the same time,
- .call( )
- C == Commas
 - ๐.call(this, โค, ยฎ๏ธ)
 
 - .apply( )
- A == Array
 - ๐.apply(this, [โค, ยฎ๏ธ])
 
 
 - .call( )
 
- โฌ๏ธ.spherify().blueify().squigglify()
 - โฌ๏ธ-> โซ๏ธ-> ๐ต-> ๐
 - 'this' is whatever 'this' was, at the left of the dot.
 - Chaining Object methods on methods on methods is possible since, after modifying โthis,โ (โฌ๏ธ-> โซ๏ธ) each of those methods return โthis,โ (โซ๏ธ) for the next method to consume. (โซ๏ธ-> ๐ต) .. return (๐ต) .. then (๐ต-> ๐) .. return (๐) and so on.
 - It's like adding beads to a bracelet. Before you can add another bead, you gotta expose the thread inside it.
 
When you realize that all things in JS are just a โฌ primitive or an { โฌ,โฌ,โฌ } object, it's a lot easier to ๐ง remember what 'this' is.
โ๏ธ Thanks for reading! ๐ฑโ๐
๐ ๐ โค ยฎ๏ธ ๐ ๐๐
All materials herein are ยฉ 2021 Summer Tinio.
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 4.0 Unported License.



