[κ°λ ] μ€μ½νμ ν΄λ‘μ , this, νΈμ΄μ€ν
μ€μ½νμ ν΄λ‘μ
1) μ€μ½ν : λ³μμ μ κ·Όμ±μ κ΄ν κ²
- μ μ μ€μ½ν : μ μμ μ μΈλμ΄ μμ΄ μ΄λ κ³³μμλ ν΄λΉ λ³μμ μ κ·Όν μ μλ κ²
- ν¨μ μ€μ½ν : ν΄λΉ μ§μμμλ§ μ κ·Ό κ°λ₯ν΄, μ§μμ λ²μ΄λ κ³³μμλ μ κ·Ό λΆκ°
- λΈλ‘ μ€μ½ν : λΈλ‘ {}μ΄ μμ±λ λλ§λ€ μλ‘μ΄ μ€μ½νκ° μμ±(ES6)
2) ν΄λ‘μ : ν¨μκ° λ λ€λ₯Έ ν¨μ λ΄λΆμ μ€μ²©λ νν
this
1) Java
- νμ¬ κ°μ²΄λ₯Ό μ°Έμ‘°
2) Javascript
- javascriptλ νμ¬ μ€ν 컨ν μ€νΈλ₯Ό μ°Έμ‘°, νλμ κ°μ²΄
- μ€ν 컨ν μ€νΈ μ€νμ΄ μ‘΄μ¬
-> μ€νμ 맨 μλ« λΆλΆμ λͺ¨λ λμμ μμμ μΈ μ μ 컨ν μ€νΈκ° μμΉ
- μ€ν 컨ν μ€νΈ : λμ μ€μΈ μ€ν κ°λ₯ν μ½λμ μμ κΆ
3) μ€ν κ°λ₯ν μ½λ
- μ μ μ½λ : Javascript νλ‘κ·Έλ¨μ΄ μμλλ κ³³λΆν° μνλλ μ½λ, λΈλΌμ°μ μ κ²½μ° window κ°μ²΄κ° μ‘΄μ¬
- Eval μ½λ : λ΄μ₯λ eval() ν¨μμ μΈμλ‘ μ λ¬λλ λ¬Έμμ΄ κ°
- ν¨μ μ½λ : ν¨μμ λ³Έλ¬Έ μ½λ, ν¨μ λ΄λΆμ λͺ¨λ μ½λλ₯Ό μλ―Ένμ§λ μμ
4) μ€ν 컨ν μ€νΈλ₯Ό λ³κ²½νλ λ°©λ²
- call() : 리μ€νΈ ννμ μΈμλ₯Ό μ λ¬λ°μ, 첫 λ²μ§Έ μΈμλ₯Ό ν¨μ μ½λμ μ€ν 컨ν μ€νΈλ‘ μ¬μ©
- apply() : λ°°μ΄ ννμ μΈμλ₯Ό μ λ¬λ°μ, 첫 λ²μ§Έ μΈμλ₯Ό ν¨μ μ½λμ μ€ν 컨ν μ€νΈλ‘ μ¬μ©
- bind() : μλ‘μ΄ ν¨μμ μ€ν 컨ν μ€νΈλ‘ μ λ¬λ°μ 첫 λ²μ§Έ μΈμμ λ°μΈλ©λ μλ‘μ΄ ν¨μλ₯Ό μμ±, μλ‘μ΄ ν¨μλ μ€ν 컨ν μ€νΈλ₯Ό λ³κ²½νμ§ μμ
5) μ€ν 컨ν μ€νΈ
- μμ±μ ν¨μ νΈμΆ : new User() -> ν¨μ λ³Έλ¬Έ λ΄μ thisκ° λ€λ₯Έ μΈ κ°μ§ μ νμ ν¨μ νΈμΆλ‘ λ§λ€μ΄μ§ μΈμ€ν΄μ€λ₯Ό μ μΈνκ³ μμ±μλ‘ μμ±λ κ°μ²΄λ₯Ό μ°Έμ‘°
- μ§μ ν¨μ νΈμΆ : ask() -> ν¨μ λ³Έλ¬Έ λ΄λΆμ thisκ° λ€λ₯Έ μΈ κ°μ§ μ νμ ν¨μ νΈμΆλ‘ λ§λ€μ΄μ§ μΈμ€ν΄μ€λ₯Ό μ μΈνκ³ μ μ 컨ν μ€νΈλ₯Ό μ°Έμ‘°
- λ©μλ νΈμΆ : user.speak() -> ν¨μ λ³Έλ¬Έ λ΄λΆμ thisκ° λ€λ₯Έ μΈ κ°μ§ μ νμ ν¨μ νΈμΆλ‘ λ§λ€μ΄μ§ μΈμ€ν΄μ€λ₯Ό μ μΈνκ³ λ©μλμ μν κ°μ²΄ μ°Έμ‘°
- 컨ν μ€νΈ λ³κ²½ νΈμΆ : ask.call(this), ask.apply(this) -> ν¨μ λ³Έλ¬Έ λ΄λΆμ thisκ° λ€λ₯Έ μΈ κ°μ§ μ νμ ν¨μ νΈμΆλ‘ λ§λ€μ΄μ§ μΈμ€ν΄μ€λ₯Ό μ μΈνκ³ call() λ©μλμ 첫 λ²μ§Έ μΈμλ‘ μ λ¬λ°μ κ°μ²΄λ₯Ό μ°Έμ‘°
νΈμ΄μ€ν
- Javascript μΈν°ν리ν°κ° ν¨μ μ μΈκ³Ό λ³μ μ μΈμ μ μΈλ€μ΄ μν΄ μλ μ€μ½νμ μ΅μλ¨μΌλ‘ λμ΄μ¬λ¦¬λ λ°©λ²
ex1)
msg = 'no msg';
var msg;
console.log(msg); // no msg μΆλ ₯
function msg() {
console.log('msg');
}
msg(); // Uncaught TypeError μΆλ ₯
- μ μ£Όμκ³Ό κ°μ΄ μΆλ ₯λλ μ΄μ -> Javascript μΈν°ν리ν°κ° λ€μκ³Ό κ°μ΄ μ½λλ₯Ό μ²λ¦¬νκΈ° λλ¬Έ
// ν¨μ μ μΈμ μ΅μμλ‘ μμΉ
function msg() {
console.log('msg');
}
// λ³μλ ν¨μ μλ
var msg;
msg = 'no msg';
console.log(msg); // no msg μΆλ ₯
msg(); // Uncaught TypeError: msg is not a function μΆλ ₯
var msg = function() {}μ κ°μ ν¨μ ννμμ λ³μ μ μΈμ΄κΈ°λ νκΈ° λλ¬Έμ μ΅μμλ‘ μ΄λνμ§ μμ
ex2)
function work() {
study();
var study = function() {
console.log('Study at work!');
}
return;
function study() {
console.log('Study at home!');
}
}
study(); // Study at home! μΆλ ₯
- μΈν°ν리ν°κ° λ€μκ³Ό κ°μ΄ μ½λ μ²λ¦¬
function work() {
function study() {
console.log('Study at home!');
}
var study;
study();
study = function() {
console.log('Study at work!');
}
return;
}
study(); // Study at home! μΆλ ₯
μΈν°ν리ν°λ ν¨μ μ μΈμ μ€μ½νμ μ΅μμλ‘ μ΄λμν€κ³ λμ λ³μ μ μΈμ νμ§λ§, λμ μ νμ§ μμ
=> Javascript μΈν°ν리ν°λ ν΄λΉ μ€μ½νμ μ΅μμμ ν¨μ μ μΈμ μ΄λμν€κ³ , κ·Έ λ€μ λμ ννμμ΄ μλ λ³μ μ μΈμ μ΄λμν΄, κ·Έλμ return μ μ΄ν ν¨μλ₯Ό μ μΈν΄λ λ¬Έμ κ° μμ