{"componentChunkName":"component---src-templates-blog-post-js","path":"/keyword-this/","result":{"data":{"site":{"siteMetadata":{"title":"Noah's Web Dev Notes"}},"markdownRemark":{"id":"7ddbb1fd-8bfe-59c3-a3ae-6514e1d78309","excerpt":"‘this’ is a javascript keyword. It is an object automatically generated inside the function body when the function is running, and can only be used inside the…","html":"<blockquote>\n<p>‘this’ is a javascript keyword. It is an object automatically generated inside the function body when the function is running, and can only be used inside the function body.</p>\n</blockquote>\n<p><strong><em>this</em></strong> has different values depending on where it is used:</p>\n<ul>\n<li>In a method, <strong><em>this</em></strong> refers to the <strong>owner object</strong>.</li>\n<li>Alone, <strong><em>this</em></strong> refers to the <strong>global object</strong>.</li>\n<li>In a function, <strong><em>this</em></strong> refers to the <strong>global object</strong>.</li>\n<li>In a function, in strict mode, <strong><em>this</em></strong> is <strong>undefined</strong>.</li>\n<li>In an event, <strong><em>this</em></strong> refers to the element that received the event.</li>\n<li>Methods like call(), and apply() can refer <strong><em>this</em></strong> to any object.</li>\n</ul>\n<h5>this in a method</h5>\n<p>In the example <strong><em>this</em></strong> refers to the <strong>person</strong> object. The person object is the <strong>owner</strong> of the fullName method.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token comment\">// Create an object:</span>\n<span class=\"token keyword\">const</span> person <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  firstName<span class=\"token operator\">:</span> <span class=\"token string\">\"John\"</span><span class=\"token punctuation\">,</span>\n  lastName<span class=\"token operator\">:</span> <span class=\"token string\">\"Doe\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function-variable function\">fullName</span> <span class=\"token operator\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>firstName <span class=\"token operator\">+</span> <span class=\"token string\">\" \"</span> <span class=\"token operator\">+</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>lastName<span class=\"token punctuation\">;</span> <span class=\"token comment\">// this refers to person</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Display data from the object:</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>person<span class=\"token punctuation\">.</span><span class=\"token function\">fullName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h5>this alone:</h5>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">let</span> x <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token comment\">// Window</span></code></pre></div>\n<h5>this in a Function (default)</h5>\n<blockquote>\n<p>In a JavaScript function, the owner of the function is the default binding for this. Because function could be considered as a method of the object Window. So, in a function, this refers to the Global object [object Window].</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">function</span> <span class=\"token function\">myFunction</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">//Window</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h5>this in a Function (strict)</h5>\n<blockquote>\n<p>JavaScript strict mode does not allow default binding. So, when used in a function, in strict mode, this is undefined.</p>\n</blockquote>\n<h5>this in a constructor</h5>\n<blockquote>\n<p>When using this inside a constructor, this refers to the object that been created by the constructor</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">var</span> x <span class=\"token operator\">=</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">Obj</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">var</span> obj <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Obj</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>obj<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 1</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span>  <span class=\"token comment\">// 2</span></code></pre></div>\n<h5>this in Event Handlers</h5>\n<blockquote>\n<p>In HTML event handlers, this refers to the HTML element that received the event</p>\n</blockquote>\n<p>For example, <strong><em>this</em></strong> refers to the button element below:</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token doctype\"><span class=\"token punctuation\">&lt;!</span><span class=\"token doctype-tag\">DOCTYPE</span> <span class=\"token name\">html</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onclick</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>this.style.display=<span class=\"token punctuation\">'</span>none<span class=\"token punctuation\">'</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Click to Remove Me!<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span> \n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h5>Object Method Binding</h5>\n<blockquote>\n<p>In these examples, this is the person object (The person object is the “owner” of the function):</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token comment\">// Create an object:</span>\n<span class=\"token keyword\">const</span> person <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  firstName  <span class=\"token operator\">:</span> <span class=\"token string\">\"John\"</span><span class=\"token punctuation\">,</span>\n  lastName   <span class=\"token operator\">:</span> <span class=\"token string\">\"Doe\"</span><span class=\"token punctuation\">,</span>\n  id     <span class=\"token operator\">:</span> <span class=\"token number\">5566</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function-variable function\">myFunction</span> <span class=\"token operator\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Display data from the object:</span>\ndocument<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"demo\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">=</span> person<span class=\"token punctuation\">.</span><span class=\"token function\">myFunction</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// [object Object] </span></code></pre></div>\n<h5>Explicit Function Binding</h5>\n<blockquote>\n<p>The <strong><em>call()</em></strong> and <strong><em>apply()</em></strong> methods are predefined JavaScript methods. They can both be used to call an object method with another object as argument.</p>\n</blockquote>\n<p>In the example below, when calling person1.fullName with person2 as argument, <strong><em>this</em></strong> will refer to person2, even if it is a method of person1:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> person1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function-variable function\">fullName</span><span class=\"token operator\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>firstName <span class=\"token operator\">+</span> <span class=\"token string\">\" \"</span> <span class=\"token operator\">+</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>lastName<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">const</span> person2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  firstName<span class=\"token operator\">:</span><span class=\"token string\">\"John\"</span><span class=\"token punctuation\">,</span>\n  lastName<span class=\"token operator\">:</span> <span class=\"token string\">\"Doe\"</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">let</span> x <span class=\"token operator\">=</span> person1<span class=\"token punctuation\">.</span><span class=\"token function\">fullName</span><span class=\"token punctuation\">.</span><span class=\"token function\">call</span><span class=\"token punctuation\">(</span>person2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \ndocument<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"demo\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">=</span> x<span class=\"token punctuation\">;</span> <span class=\"token comment\">// John Doe</span></code></pre></div>","frontmatter":{"title":"Javascript keyword:'this'","date":"December 14, 2020","description":"Let's discuss the meaning of 'this'."}},"previous":{"fields":{"slug":"/var-let-const/var-let-const/"},"frontmatter":{"title":"Difference between var, const and let?"}},"next":{"fields":{"slug":"/reference-value/"},"frontmatter":{"title":"Reference and value"}}},"pageContext":{"id":"7ddbb1fd-8bfe-59c3-a3ae-6514e1d78309","previousPostId":"d422e799-3251-5f86-900c-35e0e0b2f3ab","nextPostId":"c063f940-d1d1-5055-a113-1f6316505656"}},"staticQueryHashes":["2841359383","3257411868"]}