λͺ©μ°¨
1. μμ±μ ν¨μ
ν¨μλ μ¬μ¬μ©κ°λ₯ν μ½λλ₯Ό λ¬Άλ κ² μΈμλ κ°μ²΄λ₯Ό μμ±νλ μν μ μνν μ μλ€.
β» functionμΌλ‘ μ μΈλ ν¨μλ κΈ°λ³Έμ μΌλ‘ μμ±μ ν¨μμ κΈ°λ₯μ κ°λλ€.
μμ) κ°μ²΄ μμ±
const student1 = {
name : 'Sam',
idNum : 20,
say () {
return `μλ
νμΈμ. ${idNum}λ² ${name}μ
λλ€.`;
}
};
const student2 = {
name : 'Tom',
idNum : 25,
say () {
return `μλ
νμΈμ. ${idNum}λ² ${name}μ
λλ€.`;
}
};
μμ κ°μ΄ λΉμ·ν ννμ κ°μ²΄λ₯Ό μ¬λ¬κ° λ§λ€μ΄μΌνλ κ²½μ° κ°μ μ½λλ₯Ό λ°λ³΅νλ κ²μ΄κΈ° λλ¬Έμ
ν¨μλ₯Ό νμ©νλ©΄ λμ± νΈλ¦¬νκ² κ΅¬νν μ μλ€.
μμ±μ ν¨μ μμ± Rule
- ν¨μλͺ
μ λλ¬Έμλ‘ μ μνλ€. - return λ¬Έμ΄ μ‘΄μ¬νμ§ μλλ€. (κ°μ²΄λ₯Ό λ°ννλ ν¨μλ λ€λ¦) - μμ±μ ν¨μλ₯Ό new μ°μ°μμ ν¨κ» μ¬μ©νλ€. (newλ₯Ό μ¬μ©ν΄μΌ μμ±μ ν¨μμ κΈ°λ₯μ μνν¨, μ λΆμ΄λ©΄ μΌλ°ν¨μ) - ' this.~ ' λ‘ κ°μ²΄μ νλ‘νΌν°λ€μ μ μνλ€. - μμ±μ ν¨μμμλ λ©μλ μ μκ° λΆκ°νλ€. |
μμ)
function Student(name, idNum) {
this.name = name;
this.idNum = idNum;
this.say = function() {
return `μλ
νμΈμ. ${idNum}λ² ${name}μ
λλ€.`;
}
}
const student1 = new Student('Sam', 20);
const student2 = new Student('Tom', 25);
μ΄μ²λΌ new μ°μ°μλ₯Ό λΆμ¬μ μ¬μ©ν΄μΌλ§ μλνλλ‘ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
λ§μ½ μ΄λ₯Ό μ¬μ©νμ§ μλλ€λ©΄ undefinedλ₯Ό λ°ννλ€.
// new μ°μ°μλ₯Ό μ¬μ©νμ§ μμ κ²½μ°
const student3 = Student('David', 15);
console.log(student3);
>>> undefined
2. μμ±μ ν¨μλ‘ λ§λ€μ΄μ§ κ°μ²΄
μμ±μ ν¨μλ‘ λ§λ€μ΄μ§ κ°μ²΄λ λ€λ₯Έ λ°©μμ κ°μ²΄μ λ€λ₯΄λ€.
1) νλ‘ν νμ prototype
νλ‘ν νμ μ JSμμ κ°μ²΄μ§ν₯μ ꡬνν μ μλλ‘ λλ μν μ νλ€.
μ΄κΈ°μλ ν΄λμ€κ° μ‘΄μ¬νμ§ μμκΈ° λλ¬Έμ νλ‘ν νμ μΌλ‘ ꡬνμ νμλ€.
ν΄λμ€μ λΉν΄ λ€λ¨μ΄μ§λ κ²μ΄ μλ μ¬μ©μ λ°λΌ λ κ°λ ₯νκ² μ¬μ©μ΄ κ°λ₯νλ€.
λν ν΄λμ€ μμ²΄κ° νλ‘ν νμ μ κΈ°λ°μΌλ‘ λ§λ€μ΄μ‘λ€!
μ΄μ λν μμΈν μ΄μΌκΈ°λ μΆνμ λ°λ‘ λ€λ£¨κΈ°λ‘ νκ³ κ°λ¨νλ§ μμ보μ!
μμ) μμ±μ ν¨μμ κ°μ²΄ μμ±
function Player(name, job){
this.name = name;
this.job = job;
this.info = function () {
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
}
const player1 = new Player('Kassid', 'μ μ¬');
console.log(player1);
>>> Player {name: 'Kassid', job: 'μ μ¬', info: ƒ}
μμ κ°μ²΄μ νλ‘ν νμ μ μ΄μ©νμ¬ μλ‘μ΄ νλ‘νΌν°λ₯Ό μΆκ°ν΄λ³΄μ!
//.prototypeμ μ΄μ©νμ¬ μ νλ‘νΌν° μΆκ°
Player.prototype.attack = function() {
return '곡격!';
}
κΈ°μ‘΄μ 미리 μμ±ν κ°μ²΄μλ μλ‘μ΄ νλ‘νΌν°κ° μκΈ΄ κ²μ μμ μλ€.
console.log(player1.attack());
>>> 곡격!
νλ‘ν νμ μ μμ νλ©΄ μλ‘ λ§λ€μ΄μ§ μμ μΈ κ°μ²΄μ μ΄λ―Έ μ‘΄μ¬νλ κ°μ²΄ λͺ¨λ ν΄λΉ λ΄μ©μ΄ μ μ©λλ€.
λΉμ νμλ©΄ λ³Έμ¬μμ λ°°ν¬νλ λ©λ΄μΌκ³Ό κ°μ κΈ°λ₯μ νλ€.
νμ§λ§ μ¬κΈ°μ μ£Όμν μ μ νλ‘ν νμ μ μ΄μ©ν΄ μΆκ°ν κ²μ
μΌλ° νλ‘νΌν°μ λ€λ₯΄λ€λ κ²μ΄λ€. (μΈμ€ν΄μ€ vs νλ‘ν νμ )
console.log(player1);
>>>
Player {name: 'Kassid', job: 'μ μ¬', info: ƒ}
info: ƒ ()
job: "μ μ¬"
name: "Kassid"
[[Prototype]]: Object
attack: ƒ ()
constructor: ƒ Player(name, job)
[[Prototype]]: Object
μμ μμμμ μ μ μλ― [Prototype] λ΄μ μ μκ° λμ΄ μλ€.
μ΄μ λν λ΄μ©μ μΆνμ μμΈν λ€λ£° μμ μ΄λ€!
2) λ€λ₯Έ λ°©μμΌλ‘ λ§λ κ°μ²΄λ€κ³Όμ λΉκ΅
μμμ μΈκΈνλλ‘ μμ±μν¨μλ‘ λ§λ κ°μ²΄λ λ€λ₯Έ κ²λ€κ³Ό λ€λ₯΄λ€.
κ·Έκ²μ μ§μ λΉκ΅ν΄λ³΄λ©° μμ보μ!
// μμ±μ ν¨μ
function Player(name, job){
this.name = name;
this.job = job;
this.info = function () {
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
}
// κ°μ²΄ λ°ν ν¨μ
function createPlayer(name, job){
return {
name, job,
info (){
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
}
}
3κ°μ§ λ°©λ²μΌλ‘ λ§λ κ°μ²΄λ€μ λΉκ΅ν΄λ³΄μ.
μμ±μ ν¨μ, κ°μ²΄ λ°ν ν¨μ, κ°μ²΄ 리ν°λ΄ κ°κ°μ λ°©μμΌλ‘ μμ±ν΄λ³΄λ©΄ μλμ κ°λ€.
// 1. μμ±μ ν¨μ μ΄μ©
const player1 = new Player('Kassid', 'μ μ¬');
// 2. κ°μ²΄ λ°ν ν¨μ μ΄μ©
const player2 = createPlayer('Kassid', 'μ μ¬');
// 3. κ°μ²΄ 리ν°λ΄ λ°©μ
const player3 = {
name : 'Kassid',
job : 'μ μ¬',
introduce : function () {
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
}
console.log(player1);
console.log(player2);
console.log(player3);
μμ κ²°κ³Ό νλ©΄μ 보면 μ μ μλ―μ΄
μ€μ§ μμ±μλ‘ μμ±ν κ°μ²΄λ§ λ€λ¦μ μ μ μλ€.
μ΄λ logμμ νμνλ κΈ°λ₯μ΄κ³
κ°μ²΄ prototypeμ constructorλ₯Ό μ΄ν΄λ³΄μλ λ€λ₯Έ κ²μ μ μ μλ€.
μ΄λ₯Ό ν΅ν΄μ μμ±μλ‘ μμ±ν μΈμ€ν΄μ€μμ νμΈν μ μλ€.
λν
' instanceof 'μ°μ°μλ₯Ό μ΄μ©ν΄λ ν΄λΉ κ°μ²΄κ° μμ±μ ν¨μμ μν΄ λ§λ€μ΄μ‘λμ§λ₯Ό νμΈν μ μλ€.
console.log(player1 instanceof Player);
console.log(player2 instanceof Player);
console.log(player3 instanceof Player);
>>> true
>>> false
>>> false
3. μμ±μ ν¨μ μ체μ νλμ ν¨μ
// μμ±μ ν¨μ
function Player(name, job){
this.name = name;
this.job = job;
this.info = function () {
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
}
// μμ±μ μ체μ νλ‘νΌν° μΆκ°
Player.age = '23'
Player.attack = function(){
return '곡격!';
}
μμ κ°μ΄ μμ±μ ν¨μ μ체μ μλ‘μ΄ νλ‘νΌν°λ₯Ό μΆκ°νλ€.
μ΄λ¬ν λ°©λ²μ μ¬μ©νλ€λ©΄ μ΄λ€ μ μ΄ λ€λ₯ΌκΉ?
λ¨Όμ μμ±μ ν¨μ μ체μλ μ μ°μ°μλ₯Ό μ΄μ©νμ¬ μ κ·Όν μ μλ€.
// μμ±μ ν¨μ μ체μ μ κ·ΌνκΈ°
console.log(Player.attack());
>>> 곡격!
μ΄λ²μ μμ±μ ν¨μμ μΈμ€ν΄μ€λ₯Ό μμ±ν ν ν΄λΉ ν¨μμ μ κ·Όν΄λ³΄μ.
const player1 = new Player('Sally', 'κΆμ');
// μΌλ° νλ‘νΌν°μ νλ‘ν ν μ
μμ μμ±ν ν¨μ κ°κ° μ κ·Ό
console.log(player1.info());
console.log(player1.attack());
>>> μνμ¬λͺ
: Sally | μ§μ
κ΅° : κΆμ
>>> Uncaught TypeError: player1.attack is not a function
μ΄μ²λΌ κΈ°μ‘΄μ μΌλ° νλ‘νΌν° ν¨μμλ 무리μμ΄ μ κ·Όμ΄ κ°λ₯νμ§λ§
νλ‘ν νμ μ μ΄μ©νμ¬ μλ‘ μΆκ°ν νλ‘νΌν°λ μ κ·Όμ΄ λΆκ°νλ€.
μ΄λ¬ν λ°©μμ μμ±ν μΈμ€ν΄μ€λ€μ΄ μλ
μμ±μ ν¨μ μ체μ νμν κΈ°λ₯μ λ§λ€λ μ£Όλ‘ μ¬μ©λλ€.
4. new μ°μ°μ μ¬μ©νμ§ μλ κ² λ°©μ§νκΈ°!
μμ±μ¬ ν¨μλ₯Ό μ¬μ©ν λ μμμ λ€λ€λ κ²μ²λΌ new μ°μ°μλ₯Ό κΌ μ΄μ©ν΄μΌνλ€.
λ§μ½ μ¬μ©νμ§ μλ κ²½μ° undefinedλ₯Ό λ°ννλ€.
νμ§λ§ μ΄λ₯Ό κ°λ°μκ° μ€κ³μμ λ°©μ§ν μ μλ λ°©λ²μ΄ μλ€.
λ°λ‘ new.targetμ μ΄μ©νλ κ²μ΄λ€!
new.tagetμ μμ±μ ν¨μλ‘ λ§λ€μ΄μ§ κ°μ²΄μΈ κ²½μ°μ νμ ν¨κ» μμ±λλ€.
λ°λΌμ μ΄κ²μ μ 무λ₯Ό νμΈ ν
μμ κ²½μ° new μ°μ°μλ₯Ό λΆμΈ μμ±μ ν¨μλ₯Ό μ¬κ·νΈμΆνλ©΄ λλ€.
μμ)
// μμ±μ ν¨μ
function Player(name, job){
this.name = name;
this.job = job;
this.info = function () {
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
if (!new.target){
return new Player(name, job);
}
}
const p1 = new Player('Kassid', 'μ μ¬');
const p2 = Player('Kassid', 'μ μ¬');
μμ μμμμ p1μ μμ±μ ν¨μλ₯Ό newμ°μ°μμ ν¨κ» μ΄μ©νμκ³
p2λ κ·Έλ μ§ μμ μλͺ»λ μμμ΄λ€.
μ΄λ₯Ό νμΈν΄λ³΄μ!
console.log(p1);
console.log(p2);
>>> Player {name: 'Kassid', job: 'μ μ¬', info: ƒ}
>>> Player {name: 'Kassid', job: 'μ μ¬', info: ƒ}
μλͺ» μ¬μ©ν p2 μμ undefinedκ° μλ μμ±μ ν¨μλ‘ λ§λ κ°μ²΄κ° μ μμ μΌλ‘ λ€μ΄κ° λͺ¨μ΅μ΄λ€.
'π | WEB DEV > Vanilla JS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JS_κΈ°λ³Έ λ¬Έλ² (25)_ ν΄λμ€ (1) | 2023.04.02 |
---|---|
JS_κΈ°μ (3)_ Hoisting(νΈμ΄μ€ν ) λΏμκΈ° (0) | 2023.03.31 |
JS_κΈ°λ³Έ λ¬Έλ² (23)_ κ°μ²΄ + (0) | 2023.03.26 |
JS_κΈ°μ (2)_ IIFE(μ¦μ μ€ν ν¨μ νν) (0) | 2023.03.16 |
JS_κΈ°λ³Έ λ¬Έλ² (22)_ 맀κ°λ³μ (κΈ°λ³Έκ°, arguments, λλ¨Έμ§ λ³μ, μ΄μμ μΈ ν¨μ?) (0) | 2023.03.12 |
λκΈ