2013-08-14 1 views
2

공용 메서드에서 개인 메서드 add을 동적으로 호출 할 수 없습니다. this은 공용 범위에만 액세스하는 것 같습니다. 따라서 add으로 전화를 걸 수 없습니다. 이것을 할 수있는 방법이 있습니까?개체의 전용 함수를 동적으로 호출하는 중

function test() 
{ 
    var actionCollection = []; 

    function add(int1, int2) 
    { 
     return int1 + int2; 
    } 

    this.callFunc = function(testMethodFunction, methodArguments) 
    { 
     this[testMethodFunction].apply(null, methodArguments);//Method 'add' not found. 
    } 
} 

var t = new test(); 

alert(t.callFunc('add', [1,2])); 

플러스 나는 null는 당신은 또한 apply 인수에 this을 사용할 수 있습니다 고려 할 예정이다 정확히 모르겠어요. apply의 첫 번째 주장이해야 할 일에 대해 설명해 줄 수 있습니까? 이것은 또한 원래의 질문과 관련이 있기 때문에. 어떤 도움을 주셔서 미리 감사드립니다!

+0

[.apply()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) – Andreas

+0

@Andreas 이미 읽었습니다. 그러나 여전히 첫 번째 주장의 목적에 대해 명확하지 않다. – Tek

+0

첫 번째 인수는 함수에서 'this'를 통해 액세스 할 수있는 값을 지정합니다. 'function foo() {console.log ("this.bar ="+ this.bar); } foo.apply ({bar : 5}, null);''this.bar = 5'를 로그 할 것입니다. – Andreas

답변

0

addthis의 일부가 아닙니다. 따라서 this[testMethodFunction]을 사용할 수 없습니다. 당신이 개인 정보를 유지하려면, 다음과 같이 뭔가를 사용할 수 있습니다

function test() { 
    var actionCollection = []; 

    var private_methods = { 
     add: function(int1, int2) { 
      return int1 + int2; 
     } 
    } 

    this.callFunc = function(testMethodFunction, methodArguments) 
    { 
     // note the change here! 
     return private_methods[testMethodFunction].apply(null, methodArguments); 
    } 
} 

var t = new test(); 

alert(t.callFunc('add', [1,2])); 
+0

정말 고마워요. 그것은 최초의 정답 이었기 때문에 받아 들였습니다 :) – Tek

0

이것은 add()Test의 속성이 아니기 때문에, 그것은 Test() 폐쇄 단지 지역 변수입니다. 당신을 위해

function Test() 
{ 
    var _priv = { 
     add: function (int1, int2) 
     { 
      console.log(int1, int2); 
      return int1 + int2; 
     } 
    }; 

    this.callFunc = function(testMethodFunction, methodArguments) 
    { 
     console.log(_priv); 
     return _priv[testMethodFunction].apply(null, methodArguments); 
    } 
} 

var t = new Test(); 

console.log(t); 

console.log(t.callFunc('add', [1,2])); 

몇 가지 팁 :

  • 이 클래스와 같은 구조에 대한 대문자 (대신 testTest)

  • 사용 log()를 사용하십니까 여기

    은 샘플 코드입니다 물건을 검사하는 데 유리하다.

관련 문제