javascript pattern - JeongWu/fe-javascript GitHub Wiki
javascript pattern
๋ฉ์๋ ๋น๋ฆฌ๊ธฐ
๋ค๋ฅธ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์ ์์ ์ ๊ฒ ์ฒ๋ผ ์ฌ์ฉ๊ฐ๋ฅ
var obj1 = {
method: function() {
this.val = 2
}
};
var obj2 = {};
obj2.method = obj1.method;
obj2.method();
obj2 //->{ method: function, val: 2}
- ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์ Array ๋งค์๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์์ฃผ ์ฌ์ฉ๋จ
function fn() {
arguments.forEach = Array.prototype.forEach;
arguments.forEach(function(v) {
console.log(v)
});
}
fn(1, 2, 3); //1 2 3
function fn2() {
Array.prototype.forEach.call(arguments, function(v) {
console.log(v)
});
}
fn(1, 2, 3); //1 2 3
๋ฏน์ค์ธ
ํ ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฑฐ ๋๊ฒจ์ฃผ๊ฑฐ๋ ๋๊ฐ์ ๊ฐ์ฒด๋ฅผ ํ๋๋ก ํฉ์น๋ ๊ฒ
var obj1 = {
a: 1,
b: 2
};
var obj2 = {
c: 3,
d: 4
};
var mixin = {};
for (var key in obj1) {
mixin[key] = obj1[key]
};
for (var key in obj2) {
mixin[key] = obj2[key]
};
//es6
var mixin={...obj1, ...obj2}
๋ ํ์ดํ
๋ฉ์๋ ์ธก์์ ์์ ์ ํธ์ถํ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฆ
var obj1 = {
val: 2,
method: function() {
if (!this.val) {
throw new Error("val ์์");
}
return this.val;
}
};
var obj2 = {};
obj2.method = obj1.method;
obj1.method(); //2
obj2.method(); //Error
๋ค์์คํ์ด์ค ํจํด
์ ์ญ ๋ฒ์๋ฅผ ๊ฐ์ง ์๊ฒ ๋ณ์์ ์ ํจ๋ฒ์๋ฅผ ๊ฐ๋๋ ๊ฒ
var a = 1;
var b = 2;
//๊ฐ์ฒด ๋งด๋ฒ
var names = {
a: 3,
b: 4
}
names.a;
names.b;
//์ฆ์ ์คํํจ์
(function() {
var a = 5;
var b = 6;
a //5
b //6
}
)();
๋ชจ๋ ํจํด
๋ก์ง์ ์ ์ญ์ผ๋ก ๋ถ๋ฆฌํด ๋ ๋ฆฝ๋ ์ฝ๋ ์์ฑ
//๊ฐ์ฒด ๋ฆฌํฐ๋ด ์ด์ฉ
var obj = {
method: function() {},
a: 123,
}
//์ฆ์ ์คํ ํจ์, ํด๋ก์ ์ด์ฉ
var obj = (function() {
function privateFn() {}
var privateVar = 1;
return {
publicFn: function() {
privateFn();
return privateVar;
}
}
}
)()
์ฒด์ด๋๋ธ ๋ฉ์๋
๊ฐ์ฒด๋ช ์ ๋ค์ ์์ฑํ ํ์ ์์ด ๋์ผํ ๊ฐ์ฒด์ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถ ๊ฐ๋ฅ
var obj = {
a: function() {
console.log("a");
return this; //return this ์ถ๊ฐ
},
b: function() {
console.log("b");
return this; //return this ์ถ๊ฐ
},
}
obj.a().b().a().b();
์ปค๋ง(curring)
ํด๋ก์ ๋ฅผ ์ด์ฉํด ํจ์์ ์ธ์๋ฅผ ๋ฏธ๋ฆฌ ๋ฑ๋ก
function add(a, b) {
return a + b;
}
add(1, 2) //3
function curry(a) {
return function(b) {
return add(a, b);
}
}
var add1 = curry(1);
add1(2); //3
//es6 ํ์ดํ ํจ์
var add = a=>b=>a + b
๋ฐ์ฝ๋ ์ดํฐ
๋ฉ์๋๋ฅผ ๋ค๋ฅธ ํจ์๋ก ๊ฐ์ธ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ ์ถ๊ฐ
var obj = {
add: function(a, b) {
return a + b;
}
}
var add = obj.add;
obj.add = function(a, b) {
console.log(a, b);
return add(a, b);
}
obj.add(1, 2); //1 2
// 3
๋ฉ๋ชจ์ด์ ์ด์
ํจ์๋ด์ ๋ถํ์ํ ์์ ์ ํผํ๊ธฐ ์ํด ์ด์ ์ ์ฐ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฉ
function factorial(n) {
if (n <= 1)
return 1;
return n * factorial(n - 1);
}
var factorial = (function() {
var cache = [1, 1];
return function(n) {
if (!cache[n])
cache[n] = n * factorial(n - 1);
}
return cache[n];
}
)();