๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

[JavaScript ] prototype vs __proto__ + ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

by Tamii 2021. 3. 11.
๋ฐ˜์‘ํ˜•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด 

function Person(){}

var Person = new Function();

๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— property๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ 

 

 

 

↓  ํ•จ๊ป˜ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

https://rrecoder.tistory.com/87?category=947948

 

JavaScript ํ”„๋กœํ† ํƒ€์ž…(prototype) ์ดํ•ด

Object (๊ฐ์ฒด) ์„œ๋กœ ์—ฐ๊ด€๋œ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ์ด๋ฆ„์„ ๋ถ™์ธ ๊ฒƒ var memberObject = { tami: 'name', developer: 'java', age:'25', } this ๋ฉ”์„œ๋“œ๊ฐ€ ์ž์‹ ์ด ์†ํ•ด์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ‚ค์›Œ๋“œ ๊ฐ์ฒด๊ฐ€ ๋‚ด๋ถ€์ ..

rrecoder.tistory.com


 

prototype ๊ณผ __proto__

์˜ˆ์‹œ) 

Person Person.prototype kim lee __proto__
์ƒ์„ฑ์ž ํ•จ์ˆ˜ Person์˜ prototype ๊ฐ์ฒด  ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๊ฐ์ฒด  ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๊ฐ์ฒด 2  ์ƒ์„ฑ์žํ•จ์ˆ˜์˜
prototype ๊ฐ์ฒด ๊ฐ€๋ฅดํ‚ด

 

function Person(name, first, second, third) {
    this.name= name;
    this.first = first;
    this.second = second;
}

Person.prototype.sum = function(){
    return 'prototype' + (this.first + this.second);
}


var kim = new Person('kim',10,20);
var lee = new Person('lee',10,10);


kim.sum = function(){
    return 'this'+(this.first + this.second);
}


console.log("kim.sun()",kim.sum());
console.log("lee.sun()",lee.sum());

 

์ถœ์ฒ˜ https://opentutorials.org/module/4047/24629

 

 

1๏ธโƒฃ  function Person

2๏ธโƒฃPerson.prototype.sum 

3๏ธโƒฃ new Person 

Person ์ด๋ผ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ์ฒด ์ƒ์„ฑ

 - prototype ์†์„ฑ ์ƒ์„ฑ 

 

Person.prototype ๊ฐ์ฒด ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ 

 - constructor ์†์„ฑ ์ƒ์„ฑ

์ƒํ˜ธ์ฐธ์กฐ 

Person ์˜ contructor ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋จ 
(Person์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์ด
๋ชจ๋‘ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜)

kim ๊ฐ์ฒด ์ƒ์„ฑ 

- name, first, second ์ƒ์„ฑ

- __proto__ ์†์„ฑ 

 

 

Person์˜ prototype -> Persons.prototype <- kim์˜ __proto__

 

 

4๏ธโƒฃ kim.sum()   5๏ธโƒฃlee.sum()
1) kim.sum() ์ฐพ๊ธฐ (์žˆ์Œ)

     kim.sum = funtion (){
         this ~~ 
     }


1) lee.sum ์ฐพ๊ธฐ (์—†์Œ)

2) lee.__proto__์— sum ์ฐพ๊ธฐ (์žˆ์Œ)

lee.__proto__ -> Person's prototype sum

 

 

 

 

 

 


๐Ÿง์ƒ๊ฐํ•ด๋ณผ ๊ฒƒ 

 

๊ฐ์ฒด ์ž์ฒด์ ์œผ๋กœ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ’ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜?

 

์ƒ์„ฑ์ž๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ผ๋ฉด, 

๊ฐ์ฒด์˜ property ์ค‘ __proto__๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ.prototype ๊ฐ์ฒด์—์„œ ๊ฐ’ ์ฐพ์•„ํ˜ธ์ถœ 

 

 

__proto__์™€ prototype์˜ ์ฐจ์ด์ 

 

prototype ์€ ๋”ฐ๋กœ ๊ฐ์ฒด๋ฅผ ๋‘์–ด ์ž์‹ ๊ฐ์ฒด์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๊ณ ,

__proto__ ๋Š” ๋ถ€๋ชจ prototype๊ฐ์ฒด์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ถ€๋ชจ์˜ ํ”„๋กœํผํ‹ฐ,๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ

 

 

 

 

 

๋Œ“๊ธ€