Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.70 KB | None | 0 0
  1. ## 4_week_Wen
  2.  
  3.  
  4.  
  5. ## prototype
  6.  
  7. > 한국어로는 객체의 원형이라고 할 수 있다.
  8. >
  9. > prototype은 new function을 사용하여 새로 만든 객체에 만들어 집니다.
  10. >
  11. > 또한 **prototype에 저장된 속성**들은 생성자를 통해 객체가 만들어질 때 그 **객체에 연결**됩니다. (prototype chain)
  12. >
  13. > 생성자 함수 및 객체에 대해 3단 논법에 의해 아래 원리가 증명됩니다.
  14. >
  15. > A : `생성자 함수`는 `함수`이다.
  16. >
  17. > B : 모든 `함수`는 객체이다.
  18. >
  19. > C : `생성자 함수`는 `객체`이다.
  20. >
  21. > 이것이 의미하는 바는 `생성자 함수`로 인해 만들어진 `객체` 또한 `함수`가 된다는 것입니다.
  22. >
  23. > 아래에서 각각 단어에 대한 의미와 예시로 좀 더 접근해보겠습니다.
  24.  
  25. ## constructor / prototype
  26.  
  27. - 생성자 함수 (첫 글자 대문자)
  28. - `new` 키워드와 함께 쓰이는 함수 (new fn();)
  29. - new Array(); new Object(); new Function();
  30.  
  31. ```js
  32. function con(name){this.name = name};
  33. var who = new con(me);
  34. //con은 생성자함수.
  35. ```
  36.  
  37. - 모든 js 객체는 생성자 함수를 이용해 만들어진다.
  38.  
  39. - 객체란 : key,value(속성/값)
  40.  
  41. - 위와 동일하게 생성자 함수에서도 객체를 생성합니다.
  42.  
  43. - Object.prototype.(key) = (value)
  44. - 생성자에서 생성된 키 값은 자식인 객체도 사용 가능합니다.
  45.  
  46. ```js
  47. function con(name){this.name = name};
  48. var who = new con('me');
  49. //con으로 who에게 객체 생성
  50.  
  51. con.prototype.age = 12;
  52. who.age; //생성자에서 생성한 age이지만 자식인 who도 접근 가능해서 12 출력
  53. who.constructor === con // true
  54. ```
  55.  
  56. - 모든 함수에는 `prototype`이 있습니다.
  57.  
  58. - 이 속성이 가리키는 value에는 객체 `{contructor : f}`가 있습니다.
  59.  
  60. ```js
  61. function con(name){this.name = name};
  62. con.prototype;
  63. // {constructor : f con(name)}
  64. // 이렇게 정의하는 모든 함수에는 prototype이 있습니다.
  65. ```
  66.  
  67. - 그렇게 만들어진 `prototype`에는 반드시 `constructor`가 있습니다. 그 `constructor` 는 원래의 `Object`를 가리킵니다.
  68. - `Object.prototype.constructor = Object(){} `
  69.  
  70. ```js
  71. function con(name){this.name = name};
  72. con.prototype.constructor;
  73. // ƒ con(name){this.name = name} //원래의 con과 동일
  74. // 증명
  75. con === con.prototype.constructor; // true
  76. ```
  77.  
  78. - 즉, `Object`와 `prototype`은 **각 1개씩** 꼭 있습니다.
  79.  
  80. ## Instance
  81.  
  82. > Instance는 라는 용어는 객체와 유사합니다. 다만 의미상 객체는 좀더 일반적인 의미라면, Instance는 **현재 생성된 바로 그 객체**를 의미합니다.
  83. >
  84. > 예를 들면,
  85. >
  86. > 함수 Function도 객체입니다.
  87. > 그렇기에 "Function 객체"라 하면 "Function 자체를 의미하는지", "Function에 의해 생성된 함수 객체"를 의미하는지 모호합니다.
  88. > 이럴 경우 "Function 인스턴스"라고 하면 일반적으로 후자를 지칭합니다.
  89. >
  90. > 동일하게 "Object 인스턴스"라하면 "Object 생성자로 생성된 객체"를 의미합니다.
  91.  
  92. ```js
  93. var add = new Function("x","y","return x+y;");
  94. ```
  95.  
  96. 위 코드는 add라는 함수 인스턴스를 생성하는 표현입니다. 즉, 함수에 의해 생성된 객체가 add임을 알수있습니다.
  97.  
  98. ​ 동일하게,
  99.  
  100. ```js
  101. var obj = new Object();
  102. ```
  103.  
  104.  
  105.  
  106. ```js
  107. var a = new Array();
  108. var b = new Array();
  109. a === b //false;
  110. ```
  111.  
  112.  
  113.  
  114. ## prototype Chain (위임)
  115.  
  116. 위에서 배운 것들을 종합하여 prototype Chain (위임)에 대해 살펴 보겠습니다.
  117.  
  118. 먼저, 아래와 같이 객체를 정의하고
  119.  
  120. ```js
  121. var obj = new Object();
  122. ```
  123.  
  124. 여기에서 `Object`를 **남편**, `Object.prototype`을 **아내**, `var obj`를 **자식**으로 정의하겠습니다.
  125.  
  126. 위에서 배운 것과 같이 남편과 아내는 각 **1쌍**으로 상호작용 가능 합니다.
  127.  
  128. ```js
  129. Object.prototype.constructor === Object // true
  130. ```
  131.  
  132. 여기에서 **자식** 은 아내인 엄마가 가진 것들에 마음대로 접근할 수 있습니다.
  133.  
  134. 아래와 같은 방법을 **prototype Chain (위임)** 이라 부릅니다.
  135.  
  136. ```js
  137. Object.prototype.haha = 123
  138. obj.haha //123
  139. ```
  140.  
  141. 위와 같은 코드로 자식은 엄마의 속성에 접근하여 값을 사용할 수 있습니다.
  142.  
  143. 만약에 자식이 부르고자하는 속성을 가지고 있다면, 엄마에게서 가져오지 않고 자신의 속성을 씁니다.
  144.  
  145. 강제적으로 어머니의 속성에 접근해 값을 가져오려면 아래와 같이 접근합니다.
  146.  
  147. ```js
  148. obj.__proto__ === Object.prototype //true;
  149. ```
  150.  
  151. 위의 코드는 `obj.__proto__` 가 엄마와 동일하다는 것을 알려주고 있습니다. 그렇기에 `obj.__proto__` 뒤에 key값을 넣고 value를 넣으면 엄마의 속성을 수정할 수 있습니다.
  152.  
  153. ```js
  154. obj.__proto__.hoho = 123;
  155. Object.prototype.hoho //123;
  156. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement