μ€λΈμ νΈ : μ½λλ‘ μ΄ν΄νλ κ°μ²΄μ§ν₯ μ€κ³ μ± μ μ½μΌλ©΄μ μ 리ν λ΄μ©μ λλ€. μ€λΈμ νΈ μ€ν°λ λ ν¬ λ§ν¬
κ° μ±ν°λ³λ‘ μμ μ½λλ Typescript + Factory Function μΌλ‘ μμ±ν΄λ³΄μμ΅λλ€. Factory Function μ νΉμ§κ³Ό, μ₯μ μ μλμ κ°μ΅λλ€.
function TodoModel(data){
const todos = [];
function addData() {
console.log(`${data} addData`);
}
function add() { console.log('add'); }
return Object.freeze({
addData,
});
}
const todoModel = TodoModel('input');
todoModel.addData(); // input addData
factory function μ μ¬μ©ν΄ javascript class μ private class fields
λ₯Ό μ¬μ©νμ§ μκ³ μΊ‘μν (Encapsulation)
λ₯Ό ꡬνν μ μμ΅λλ€.
const todoModel = TodoModel('input');
console.log(todoModel.todos); // undefined
console.log(todoModel.data) // undefined
todoModel.add(); // todoModel.add is not a function
μ μλ ν¨μλ₯Ό λ³κ²½ν μ μμ΅λλ€.
todoModel.add = function() {
console.log('a new add');
}
todoModel.add(); // add
factory function μμλ ν©μ±μ ν΅ν΄ μ½λλ₯Ό μ¬μ¬μ©ν μ μμ΅λλ€. (μ λ³μ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.) class λ₯Ό μ¬μ©ν΄μ ꡬννλ κ²κ³Όμ μ°¨μ΄μ μ μλμ κ°μ΅λλ€. μμκ³Ό ν©μ±μ΄ λͺ¨λ ꡬνκ°λ₯ν class μ λ¬λ¦¬, factory function μμλ ν©μ±μΌλ‘ ꡬνν΄μΌ ν©λλ€.
/** 1. [class] μμ **/
class Service {
doSomething(){ console.log("doSomething"); }
}
class SpecialService extends Service {
doSomethingElse(){ console.log("doSomethingElse"); }
}
var specialService = new SpecialService();
specialService.doSomething();
specialService.doSomethingElse();
/** 2. [class] ν©μ± **/
class Service {
doSomething(){ console.log("doSomething"); }
}
class SpecialService{
constructor(args){
this.service = args.service;
}
doSomething() { this.service.doSomething(); }
doSomethingElse(){ console.log("doSomethingElse"); }
}
var specialService = new SpecialService({
service : new Service()
});
specialService.doSomething();
specialService.doSomethingElse();
/** 3. [factory function] ν©μ± **/
function Service() {
function doSomething(){ console.log("doSomething"); }
return Object.freeze({
doSomething
});
}
function SpecialService(args){
var service = args.service;
function doSomethingElse(){ console.log("doSomethingElse"); }
return Object.freeze({
doSomething : service.doSomething,
doSomethingElse
});
}
var specialService = SpecialService({
service : Service()
});
specialService.doSomething();
specialService.doSomethingElse();
this
λ nested function, callback μμ 컨ν
μ€νΈ μμ€ λ¬Έμ κ° λ°μν μ μμ΅λλ€. this λ₯Ό μ¬μ©νμ§ μκ³ ν΄λ‘μ + μ§μλ³μλ₯Ό ν΅ν΄ OOP λ₯Ό ꡬνν μ μμ΅λλ€. (arrow function μΌλ‘ ν΄κ²°κ°λ₯νκΈ΄ ν©λλ΅..)
function TodoModel(){
var todos = [];
function reload(){
setTimeout(function log() {
console.log(todos); //[]
}, 0);
}
}
todoModel.reload(); //[]
$("#btn").click(todoModel.reload); //[]
Γbject.freeze()
λ₯Ό ν΅ν΄ API λ₯Ό μμ ν μ μκ² λ§μ μ μμ΅λλ€.
-
1μ₯ 'κ°μ²΄, μ€κ³' -
2μ₯ 'κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°' -
3μ₯ 'μν , μ± μ, νλ ₯' -
4μ₯ 'μ€κ³ νμ§κ³Ό νΈλ μ΄λμ€ν' -
5μ₯ 'μ± μ ν λΉνκΈ°' (λ°ν) -
6μ₯ 'λ©μΈμ§μ μΈν°νμ΄μ€' -
7μ₯ 'κ°μ²΄ λΆν΄' -
8μ₯ 'μμ‘΄μ± κ΄λ¦¬νκΈ°' (λ°ν) -
9μ₯ 'μ μ°ν μ€κ³' -
10μ₯ 'μμκ³Ό μ½λ μ¬μ¬μ©' - 11μ₯ 'ν©μ±κ³Ό μ μ°ν μ€κ³'
- 12μ₯ 'λ€νμ±'
- 13μ₯ 'μλΈν΄λμ±κ³Ό μλΈ νμ΄ν'
- 14μ₯ 'μΌκ΄μ± μλ νλ ₯'
- 15μ₯ 'λμμΈ ν¨ν΄κ³Ό νλ μμν¬'