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

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

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

Object  (๊ฐ์ฒด) 

์„œ๋กœ ์—ฐ๊ด€๋œ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ์ด๋ฆ„์„ ๋ถ™์ธ ๊ฒƒ 

var memberObject = {
    tami: 'name',
    developer: 'java',
    age:'25',
}

 

this

๋ฉ”์„œ๋“œ๊ฐ€ ์ž์‹ ์ด ์†ํ•ด์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ‚ค์›Œ๋“œ

๊ฐ์ฒด๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ 

var kim = {
    name: 'kim',
    first:10,
    second:20,

    sum: function(){
        return this.first+this.second;
    }
}

console.log(kim.sum()); //30

 

์œ„์˜ ์˜ˆ์‹œ์˜ ๊ฐ์ฒด๋Š” ์ˆ˜์ž‘์—…์œผ๋กœ ๋งŒ๋“  ๊ฐ์ฒด

๊ฐ์ฒด๋ฅผ ์ฐ์–ด๋‚ด๋Š” ๋™์ž‘์„ ๋”ฐ๋กœ ๊ตฌํ˜„ ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผํ•จ 

 

 


Prototype

javascript  ๋Š”  prototype based languageโœจ

 

 

์ƒ์„ฑ์ž ์•ˆ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“œ๋Š”๊ฒฝ์šฐ ( this.sum)

function Person(name, first, secod, third) {
    this.name= name;
    this.first = first;
    this.secod = secod;
    this.sum = function(){
        return this.first + this.second;
    }
}

var kim = new Person('kim',10,20);
console.log("kim.sun()",kim.sum());

 

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

์ƒ์„ฑ์ž๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค sum์ด๋ผ๋Š” ํ•จ์ˆ˜์˜ ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ณ  ์žˆ์Œ  => ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ 

 

์ƒ์„ฑ์ž Person ์œผ๋กœ ๋งŒ๋“  ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ๊ณผ, ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ 

 

์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ๊ฐ์ฒด๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ ๋งŒ๋“ค๊ธฐ 

 

 

 

Prototype ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ 

function Person(name, first, second, third) {
    this.name= name;
    this.first = first;
    this.second = second;
}
//Person์ด๋ผ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๋ชจ๋“  ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ ์ƒ์„ฑ
Person.prototype.sum = function(){
    return this.first + this.second;
}


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

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

sum์€ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰ 

sum์€ Person์—์„œ ๋งŒ๋“  ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ๊ณต์œ ํ•จ => ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ 

 

 

function Person(name, first, second, third) {
    this.name= name;
    this.first = first;
    this.second = second;
}
//Person์ด๋ผ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๋ชจ๋“  ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ ์ƒ์„ฑ
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());

1) ๊ทธ ๊ฐ์ฒด ์ž์‹ ์ด sum์ด๋ผ๋Š” ์†์„ฑ์„ ์ฐพ์Œ 

 : kim.sum 

2) ๊ฐ์ฒด ์ƒ์„ฑ์ž์ธ Prototype์— sum์ด๋ผ๋Š” ์†์„ฑ์„ ์ฐพ์Œ 

: lee.sum์€ ๋”ฐ๋กœ ์—†์œผ๋‹ˆ -> prototype.sum  ์”€ 

 

 

 

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

 

ํ”„๋กœํ† ํƒ€์ž…์˜ ์˜๋ฏธ:

ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋ ๋•Œ ์ž๋™์œผ๋กœ ์„ ์–ธ๋˜๋Š” ์†์„ฑ๊ฐœ์ฒด 

๊ทธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ๊ทธ ํ•จ์ˆ˜์˜ porotype์„ ์ฐธ์กฐํ•œ๋‹ค.

 

 

ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ์ž ์•ˆ์—์„œ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์„ ์ •์˜ํ•˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ๋น„ํšจ์œจ :

์ƒ์„ฑ์ž๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ๋ฉ”์„œ๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ ๋–„๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค.

ํ•˜์ง€๋งŒ, ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค๋ฉด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ๋งŒ๋“  ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด

ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ๋†’์•„์ง„๋‹ค.

 

๋Œ“๊ธ€