-
-
Save nephilim/4976804 to your computer and use it in GitHub Desktop.
| function curry(fn) { | |
| var slice = Array.prototype.slice; | |
| var args = slice.call(arguments); | |
| // curry.call(obj)μ ννλ‘ νΈμΆνμ κ²½μ° | |
| var self = this; | |
| if (typeof(args[0]) != "function") { | |
| // μμΈ μ²λ¦¬ | |
| throw { name: "ArgumentException", | |
| message: "First argument should be a function" }; | |
| } | |
| called_args = args.slice(1); | |
| return function() { | |
| // λͺ μμ μΌλ‘ selfλ₯Ό μ§μ νμ§ μκ³ | |
| // thisλ₯Ό μ¬μ©νλ©΄ λ°νλ ν¨μλ₯Ό μ¬μ©νλ scopeμ λ°λΌκ°λ€. | |
| args = slice.call(called_args).concat(arguments); | |
| // μ± μ μλ μμ μ λ¬λ¦¬ captured variableμΈ selfλ₯Ό μ λ¬ν¨ | |
| return fn.apply(self, args); | |
| }; | |
| } | |
| var obj = { | |
| base: 10, | |
| add_to_base: function() { | |
| // μΈμ κ°μμ μκ΄μμ΄ λμνλλΌ μ’ κΈΈμ§λ§, | |
| // κ²°κ΅ baseμ μΈμλ₯Ό λͺ¨λ λνλ ν¨μ | |
| var args = Array.prototype.slice.call( arguments, 0); | |
| sum = this.base; | |
| for(var i =0; i < args.length; i++) { | |
| sum += args[i]; | |
| } | |
| return sum; | |
| }}; | |
| /* | |
| var add_to_hundred = curry.call(obj, obj.add_to_base, 90) | |
| add_to_hundred(100) | |
| > 200 | |
| // μ± μ μμ λ λ€μκ³Ό κ°μμ μ€ν¨ν¨ | |
| var add_to_hundred = curry.call(null, obj.add_to_base, 90) | |
| add_to_hundred(100) | |
| > NaN | |
| */ |
outsideris
commented
Feb 19, 2013
μλμ λμ μ½λλ λ€μκ³Ό κ°μ΄ objμ λ¬Έλ§₯μ μ μ©ν μ μμ΅λλ€.
obj.add_to_base.curry(20, 30).call(obj, 40)
// 100
obj.base60 = obj.add_to_base.curry(20, 30)
obj.base60(40)
// 100
κ°μΈμ μΌλ‘λ 컀리λ ν¨μλ₯Ό objμ λ©€λ²λ‘ μ§μ νλ λ λ²μ§Έ λ°©λ²μ΄ μ’μ보μ λλ€. νμ§λ§ ν΄λΉ λ¬Έλ§₯μ λ£μ§ μμΌλ©΄ μλκ³ , call/applyλ₯Ό μ μ©νλ 건 μ μ΄μ λΆκ°λ₯ν©λλ€. μ΄κ±΄ var fn = this λλ¬Έμ΄κΈ°λ...
thisλ₯Ό μ¬μ©νλ λ μμΉμ μ½λλ λμμ§ μκΈ°λ νλ°... μ΄μ¨λ μ λ°©λ²μ λ μμΉμ function prototypeμ μ μ©νλ κ²μ μκ°ν΄λ³΄μ§ λͺ»νλ€μ, μ± μ μμ λ₯Ό λ²μ΄λμ μκ°ν΄λ³Έ 건 μλλ°... (λΆλ€λΆλ€)
@outsideris κ·Έλλ μ§κ΅¬λ λλ€ κΆμλ κΆμλ @McTenshi λμμ£
μ΄λ κ°μ¬ν©λλ€. γ γ
"μλμ"λΌλ "Non-person" κ°κ΅°μ.
λ μμΉμ λ°©λ²μ functionμ prototypeμΌλ‘ νμ§ μμμ λ 첫λ²μ§Έ μΈμκ° functionμΈμ§ κ²μ¬νλ λ‘μ§μ ꡬ쑰μ μΌλ‘ ν΄κ²°νλ€λ κ²μ΄ μ°Έ μλ¦λ΅κ΅°μ.
κ·Έλμ λ λ μ½λκ° λΉμ·νκ±Έ 보λ λ€νΌλ¦Όλμκ²μλ λμμ ν₯κΈ°κ°...
λ§μ§λ§μ€μ.. +1 μ λλ€.
@nephilim λμλμ μΈμ μ΄ λ κ°λ ₯νμ΅λλ€...
@outsideris μ λμκ° μλμμ§! μ΄μ¨κ±΄ μ μ£Όμ₯μ μ΄ν΄ν΄ μ£Όμλ κ°μ¬. (νμ§λ§ λ μμΉ μ½λ 보μλ§μ μ΄μΌκΈ° νλλ°... μμ λ³΄κ³ μμ§ μμ;;; )
@McTenshi 'μ-λμ'λ‘λ 'μλ-μ'λ‘λ μ½νλ κ΅°μ. λ κ°μ λ³λͺ μ ν νμ!