2012-04-17 3 views
2

나는 루프에서 함수를 생성 할 싶습니다코코의 루프에서 함수를 생성하는 방법은 무엇입니까?

var k, v, __ref, __own = {}.hasOwnProperty; 
for (k in __ref = t) if (__own.call(__ref, k)) { 
    v = __ref[k]; 
    ctor.prototype[k] = __fn; 
} 
function __fn(){ 
    v.apply(this, arguments); 
    return this; 
} 

어떻게 출력이 다음 확인하기 위해 코코 스크립트를 변경 :

그러나
for own k, v in t 
    ctor::[k] = -> 
    v(...) 
    @ 

는, 코코는 하나의 함수를 생성하고 재사용 보인다 :

var k, v, __ref, __own = {}.hasOwnProperty; 
for (k in __ref = t) if (__own.call(__ref, k)) { 
    v = __ref[k]; 
    ctor.prototype[k] = function() { 
    v.apply(this, arguments); 
    return this; 
    } 
} 

설명 :이 언어를 의미 코코와 함께 : http://satyr.github.com/coco/ (A 커피 스크립트 포크).

+0

은 [이] (http://coco.tomaszewskiweb.com/) 당신이에 대해 "코코"얘기가 당신이 바인딩 let를 사용해야합니까? – Pointy

+0

@Pointy : https://github.com/satyr/coco#readme – Matt

+0

네, coffeescript 포크, thx @Matt라고 생각합니다. –

답변

2

이것은 기능입니다. 루프 내에서 직접 function을 작성하면 거의 항상 피해야합니다. JSLint는 "루프 내에서 기능을 만들지 마라"는 것을 금지합니다.

특히 코드에 범위 버그가 있습니다 (동적으로 생성 된 메서드의 모든 v은 같은 값을 참조합니다). 로 컴파일

for own k, v in t 
    let 
    ctor::[k] = -> 
     v ... 
     this 

:

var k, v, __ref, __own = {}.hasOwnProperty; 
for (k in __ref = t) if (__own.call(__ref, k)) { 
    v = __ref[k]; 
    (__fn.call(this, k, v)); 
} 
function __fn(k, v){ 
    ctor.prototype[k] = function(){ 
    v.apply(this, arguments); 
    return this; 
    }; 
} 
+0

설명을 위해 +1 Thx. –

관련 문제