πŸ“’ JavaScript

JavaScript ν”„λ‘œν† νƒ€μž…(prototype) 이해

Tamii 2021. 3. 10. 22:08
λ°˜μ‘ν˜•

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을 μ°Έμ‘°ν•œλ‹€.

 

 

ν”„λ‘œν† νƒ€μž…μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  μƒμ„±μž μ•ˆμ—μ„œ λ©”μ„œλ“œμ™€ 속성을 μ •μ˜ν•˜λ©΄ λ°œμƒν•˜λŠ” λΉ„νš¨μœ¨ :

μƒμ„±μžκ°€ 생성될 λ•Œλ§ˆλ‹€ λ©”μ„œλ“œλ₯Ό μƒˆλ‘œ λ§Œλ“€κΈ° 떄문에 λ©”λͺ¨λ¦¬ λ‚­λΉ„κ°€ 심해진닀.

ν•˜μ§€λ§Œ, ν”„λ‘œν† νƒ€μž…μ„ λ§Œλ“€λ©΄ μƒμ„±μž ν•¨μˆ˜κ°€ λ§Œλ“  λͺ¨λ“  객체듀이

ν”„λ‘œν† νƒ€μž…μ„ 톡해 λ§Œλ“€μ–΄μ§„ λ©”μ„œλ“œλ₯Ό κ³΅μœ ν•˜λ©° μž¬μ‚¬μš©ν•˜κ³  λ©”λͺ¨λ¦¬ 효율이 높아진닀.