{"data":{"site":{"siteMetadata":{"title":"lastrites2018","author":"lastrites2018","siteUrl":"https://lastrites2018.netlify.com","comment":{"disqusShortName":"","utterances":"lastrites2018/gatsby-first-blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"9c0b39dd-4a89-5056-8e3c-2f61048222b5","excerpt":"this의 5가지 binding 패턴 복습 ( jd1386님의 정리 )","html":"<p>this의 5가지 binding 패턴 복습 (<a href=\"https://github.com/jd1386\">jd1386님의 정리</a>)</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// this 는 함수를 어떻게 호출(선언x)하느냐에 따라</span>\n<span class=\"token comment\">// this에 할당되는 객체가 달라진다.</span>\n<span class=\"token comment\">// 다음과 같은 함수가 있다고 가정할 때</span>\n\n   <span class=\"token keyword\">var</span> <span class=\"token function-variable function\">foo</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       console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   <span class=\"token punctuation\">}</span>\n\n   <span class=\"token comment\">// 1. 글로벌 호출(Global reference)</span>\n   console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// => 전역 객체인 window를 가리킨다.</span>\n\n\n   <span class=\"token comment\">// 2. 함수 호출(Function invocation Pattern)</span>\n   <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// => foo()와 같이 함수 호출을 할 경우 해당 함수의 스코프인 전역 스코프에서 this인 window 객체를 가리킨다.</span>\n사실상 window<span class=\"token punctuation\">.</span><span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>이기 <span class=\"token function\">때문에</span><span class=\"token punctuation\">(</span>메소드 invocation과 같은 이야기<span class=\"token punctuation\">)</span>\n\n   <span class=\"token comment\">// 3. 메소드 호출 패턴(Method Invocation pattern)</span>\n   <span class=\"token comment\">// 객체의 메소드로 호출되면 this는 해당 객체를 가리킨다.</span>\n   <span class=\"token keyword\">var</span> obj <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n     name<span class=\"token punctuation\">:</span> <span class=\"token string\">\"Jungdo\"</span><span class=\"token punctuation\">,</span>\n     sayName<span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n       console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n     <span class=\"token punctuation\">}</span>\n   <span class=\"token punctuation\">}</span>\n   <span class=\"token comment\">// 위의 객체 obj에서 sayName이라는 메소드를 만들어주고 obj.sayName()을 실행하면 this의 대상을 찾아 (obj), 객체 obj의 name을 프린트한다.</span>\n   <span class=\"token comment\">// object의 key 안에 value값으로 function이 존재하고, 이를 호출하는 것을 method 호출이라 한다. 이러한 경우, this는 부모 object를 그 값으로 한다. (호연님 정리)</span>\n\n   <span class=\"token comment\">// 4. 생성자 호출 패턴(Construction mode)</span>\n   <span class=\"token comment\">// 객체의 인스턴스(instance)를 만들시 (Construction)</span>\n   <span class=\"token comment\">// 객체의 this는 새로 생성된 instance를 가리킨다.</span>\n   <span class=\"token comment\">// 다음과 같이 placeholder로 많이 사용된다.</span>\n   <span class=\"token keyword\">var</span> <span class=\"token function-variable function\">Car</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">,</span> year<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n     <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> name<span class=\"token punctuation\">,</span>\n     <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>year <span class=\"token operator\">=</span> year\n   <span class=\"token punctuation\">}</span>\n\n   <span class=\"token keyword\">var</span> benz <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Car</span><span class=\"token punctuation\">(</span><span class=\"token string\">'benz'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'2012'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>benz<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// => { name: 'benz', year: '2012' }</span>\n\n   <span class=\"token comment\">// 5. Call or Apply(Apply Invocation Pattern)</span>\n   <span class=\"token comment\">// call이나 apply 메서드를 써서 지칭하고자 하는 this의 대상을 분명하게 명시해줄 수 있다. 이럴 때는 첫번째 인자가 this이다.</span>\n   <span class=\"token keyword\">var</span> obj <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n     name<span class=\"token punctuation\">:</span> <span class=\"token string\">\"Jungdo\"</span>\n   <span class=\"token punctuation\">}</span>\n   foo<span class=\"token punctuation\">.</span><span class=\"token function\">call</span><span class=\"token punctuation\">(</span>obj<span class=\"token punctuation\">)</span> <span class=\"token comment\">// => 첫번째 인자 obj가 this가 된다.</span>\n   foo<span class=\"token punctuation\">.</span><span class=\"token function\">apply</span><span class=\"token punctuation\">(</span>obj<span class=\"token punctuation\">)</span> <span class=\"token comment\">// => 첫번째 인자 obj가 this가 된다.</span>\n\n\n\n<span class=\"token comment\">// jd1386님의 훌륭한 설명을, 제 자신이 이해 할 수 있도록 약간 수정했습니다.</span></code></pre></div>","frontmatter":{"title":"this 또 복습","date":"August 25, 2018"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/til/20180825 this 또 복습/","previous":{"fields":{"slug":"/til/20180824 콜백 함수 (코드종  강의)/"},"frontmatter":{"title":"콜백 함수 (코드종 강의)","category":"TIL"}},"next":{"fields":{"slug":"/til/20180826 poiemaweb.com 공부 시작 - 자료형과 변수/"},"frontmatter":{"title":"poiemaweb.com 공부 시작 - 자료형과 변수","category":"TIL"}}}}