2012-01-06 2 views
-1

I 매개 변수로 객체를 반환하는 익명 함수를 통과 적용 자바 스크립트

1) var x = {}; 
    x.data = {name: 'name', lname: 'lname'}; 
    x.someOtherData = ['blah','blah','irrelevant']; 
    aFunction(x); 

그래서 내가 문 위 그룹을 여러 번 호출 다음 코드를 가지고, 당연히 중요되는 문장의 순서. 나는 때때로 나에게 두통이 많이 발생했습니다하는 마지막 문 aFunction (X)를 수행하는 것을 잊지, 그래서 수행 한 다음 작동

2) aFunction(function(){ 
    var x = {}; 
    x.data = {name: 'name', lname: 'lname'}; 
    x.someOtherData = ['blah','blah','irrelevant']; 
    return x; 
    }());      

과에서 시행하는 방법이 있다면 궁금했다 내 함수 메서드 인 aFunction은 전달되는 매개 변수가 익명의 함수 여야합니다. 나는 내가 위의 검사가 작동 다음과 작업을 수행 할 수 있습니다 알고있는 다음은 분명히

3) function aFunction(x) { 
    if(x.constructor == Function) { 
     alert('yay you're doing it right'); 
    } else { 
    alert('nay, you're doing it wrong'); //this is what happens given that x.constructor == Object 
    } 
} 

작동하지 않습니다 그래서 나는 익명 함수에서 객체를 반환하고,하지만 난 aFunction 인수 안에 내 모든 논리를 둘러싸 싶습니다 코드 스 니펫 2와 마찬가지로 괄호 안에 :

4) var z = function(){ 
    var x = {}; 
    x.data = {name: 'name', lname: 'lname'}; 
    x.someOtherData = ['blah','blah','irrelevant']; 
    return x; 
    }; 
    aFunction(z); 

아이디어가 있습니까?

업데이트 :

신경 쓰지 마세요. 내가 한 것처럼 익명의 함수를 즉시 호출 할 수는 없으며 aFunction 메서드에서 호출 할 수 있습니다. 물론 스택 오버플로에서 문제를 작성하여 문제와 솔루션이 더 명확 해집니다. 다른 사람들이 비슷한 문제를 어떻게 풀어 낼 수 있는지 아직도 열려 있습니다. 디자인 패턴 등

솔루션 :

aFunction(function(){ 
var x = {}; 
x.data = {name: 'name', lname: 'lname'}; 
x.someOtherData = ['blah','blah','irrelevant']; 
return x; 

}); 내 기능 방법, aFunction에 적용하는 방법이 있다면

function aFunction(x) { 
if(x.constructor == Function) { 
     alert('yay you're doing it right'); 
     x(); //call it here 
    } else { 
    alert('nay, you're doing it wrong'); 
    } 

}

+1

나는 완전히 이해하고 있는지 모르겠다 - 옵션 # 4를 원하지만 전화에서'function() {...}'을 사용하고 싶습니까? 그렇게하면 익명 함수 "inside aFunction argument"를 전달하게됩니다. – pimvdb

+0

그건 그렇고,'aFunction ({data : {...}, someOtherData : [...]})); – pimvdb

답변

2

나는 매개 변수가 익명 함수해야 전달되는 것을, 호기심이었다.

하지만 너는 이 아니고 익명의 기능을 전달한 사람은이 아닙니다. 당신은 익명의 함수를 호출하고 결과를 전달합니다.

:

당신은 (대신 함수를 호출 한 결과보다) 함수를 전달할 수 다음 aFunction(x)에서 당신이 값을 얻기 위해 호출 한 후 x가 함수 인 것을 테스트하고 줄/객체로 작업하기

function aFunction(x) { 
    if(typeof x === "function") { 
     var workingValue = x(); 
    } 
} 

물론 전달 된 함수가 올바른 형식의 값을 반환하지는 않습니다. 또한 익명의 기능을 보장하지 않습니다.

숫자 2 문법은 현재 범위에서 작동하는 변수를 유지하는 장점이 있지만 (무언가를 깨뜨리지 않는다고 가정 함) 괜찮 았지만, 다른 처리가 끝나면 aFunction()에 전화하는 것을 잊지 마십시오. 의견은 다른 사람들이 읽을 수 있도록 코드를 작성하는 것입니다.

편집 : 업데이트 된 질문을 보았습니다. 위에서 언급 한 내용을 수행하기로 결정한 곳에서 (답변 한 것과 동시에 업데이트하는 것처럼 보입니다). 진심으로, 나는 입니다. 실제로는이 나쁜 디자인 패턴이라고 생각합니다. 나는 가상의 솔루션으로 만 언급했습니다. 처음에는 실제로 권장하지 않는다고 분명히 생각하지 않았습니다.

내 의견으로는 원래 번호 1 버전이 가장 좋은 방법이거나 기능을 사용해야하는 경우 숫자 2 버전이 정상입니다.

+0

예. 잡았다. 신속한 응답에 감사드립니다. – Apples

관련 문제