2011-03-07 3 views
0

동적으로 결정된 이름의 개체에서 함수를 호출하는 데 문제가 있습니다. 아래 코드는 내 코드가 현재 어떻게 설정되어 있고 doSomethingElse()라는 함수에서 발생하는 문제를 보여줍니다.동적으로 생성 된 개체 이름에서 함수를 호출하려고 시도했습니다.

var Obj = function(){ 
    this.test = this.objMgr(); 
}; 


Obj.prototype.objMgr = function(){ 

    var self = this; 


    function doSomething(){ 
      //do some processing that seems unimportant to this particular prob 

      doSomethingElse(); 
    } 


    function doSomethingElse(){ 

      //The object that I need is determined at runtime, and is therefore dynamic 
      var callFuncOnThis = 'subObj'; 

      //How the heck can I call function a on the object referenced in callFuncOnThis 
      this[callFuncOnThis].a(); //Doesn't work, this refers to dom window 
      self[callFuncOnThis].a(); //Doesn't work, self refers to obj 
      eval(callFuncOnThis).a(); //Works, but is there a better way? 
    } 


    var subObj = { 
      a:function(){ 
      }, 
      b:function(){ 
      } 
    }; 


    var subObj2 = { 
      a:function(){ 
      }, 
      b:function(){ 
      } 
    }; 


    doSomething(); 

    return{ 
     subObj:subObj, 
     subObj2:subObj2 
    } 

}; 

var test = new Obj(); 
+3

제목에 질문을 간략하게 설명해주십시오. * 또 다른 Javascript OO 질문 *은 실제로 그렇게하지 않습니다. – alex

답변

0

subObj는 참조 할 수있는 범위에 할당되지 않습니다. 그래서 eval()이 가장 좋은 솔루션입니다. 이 말을하면서, 저는 이상한 약간의 코드를보고 있습니다. 조금 더 자세히 설명해 주시겠습니까? 나는 건축 문제가있는 것처럼 느낀다.

또한 subObj 및 subObj2가 포함 된 개체를 반환하므로 해당 개체를 범위로 사용하지 않는 것이 좋습니다.

function doSomethingElse(){ 
    // ... 
    retObj[callFuncOnThis].a() 
} 

var retObj = {'subObj': subObj, 'subObj2': subObj2}; 

doSomething(); 

return retObj; 
+0

어디서부터 시작해야할지 모르겠습니다. 나는 건축 문제도있을 것이라고 생각한다. 나는 아직도 비교적 새로운 js이다. 어쨌든, 질문에있는 코드는 내가 만들고있는 jquery 플러그인의 작은 부분입니다. 플러그인에는 여러 가지 "구성 요소"가있어 동시에 사용할 수 있습니다. 이들은 위의 코드에서 subObjs입니다. 플러그인은 기본 초기화 집합을 수행 한 다음 사용자가 선택한 구성 요소를 반복하고 각각에 대해 init 함수를 호출합니다. 따라서 실제로 doSomethingElse의 코드 주위에 루프가 있습니다. –

+0

나를 잃어 버렸습니다. 그러나 요점은 반환하는 객체가 명시 적으로 정의되어야하고 (내 코드 에서처럼) 'subObj2'의 범위로 사용할 수 있어야한다는 것입니다. – Dimitry

+0

완벽하게 작동하고 의미가 있습니다. 감사! –

관련 문제