2012-04-10 3 views
0

자바 스크립트 익명 함수 및 범위에 대해 배우고 뭔가 이해하려고하지만 조금 붙어 있습니다. 개체의 익명의 자바 스크립트 함수를 한 줄로 호출하는 방법은 무엇입니까?

나는 다음과 같은 세 가지 기능이 있습니다

var funcA = function (value) { 
    test = value; 
}; 

var funcB = function (value) { 
    this.test = value; 
}; 

var funcC = function (func,value) { 
    var item = {}; 
    //single line invocation 
} 

내가 그런 다음 두 호출의 결과가 다를 것 대신에있는의 (가 //single line invocation 말한다) 자바 스크립트의 한 줄을 쓰기 위해 노력하고 있어요 같은 효과 : funcB 이후

funcC(funcA, "set"); 
funcC(funcB, "set"); 

대신 this.test를 참조하고, 그것은 우리가 funcC에서 "항목"개체의 사용을 할 수 있도록 로컬 (예) 값을 변경 될 것이라고 의미가 있습니다. 내가 다른 결과의 결과로 문의 측면에서 운이 없었어요 그러나

item.(function(func,value){func(value)})(func, value); 

: 내가 좋아하는 몇 가지 익명 함수 "물건을"일을 시도했다. (즉 노드 (.js)를 사용하여 코드를 실행하면 testthis.test 값이 모두 변경됨).

더 나은 이해에 도움이 될 것입니다. 사전에

감사합니다,

ParagonRG

답변

2

당신은 작업 할 그것을 인스턴스에게 call을 사용해야합니다.

funcB.call(item, value); 
0

anonymus 기능을 개체 속성으로 사용할 수 없습니다. 원하는 작업

var item = {"f": func}; 
item.f(value); 
// item.test == value now 

맞습니까? 자바 스크립트는이 작업을 수행하는 방법은 .call() function입니다 :

(function(val){ this.test = val; }).call(item, value); 
// yet this equivalent looks much cleaner: 
item.test = value; 
:

func.call(item, value); 
// with the difference that item has no "f" property here 

또한 익명 함수 표현식으로 call을 사용할 수 있습니다

관련 문제