2017-11-15 7 views
0

이 질문에 혼란스럽고 JavaScript MDN이 나를위한 개념을 명확히하지 않습니다.함수 내에서 작성된 객체에서 메소드 호출

invokeMethod라는 함수가 있으며이 함수에서 Object를 만들어야합니다. Object는 Method를 포함합니다. 대괄호 표기법을 사용하여 Object에서 Method를 호출해야하지만 아무것도 반환 할 필요가 없습니다.

여기는 질문과 코드입니다. 함수 괄호에서 메서드를 호출하려고하면 오류 메시지가 계속 표시됩니다.

질문 : 메서드는 개체의 메서드 이름을 포함하는 문자열입니다. 대괄호 표기법을 사용하여이 메서드를 호출합니다. 아무것도 반환하지 않아도됩니다.

입력 예 :

{ foo: function() {} }, 'foo' 

내 코드 :

function invokeMethod(object, method) { 
    // code here 
    const obj = { 
    name: 'kung', 
    foo: function(){ 
     console.log('foo'); 
    } 
    }; 
} 

invokeMethod(obj[foo]); 
+1

;' 변수'obj'는 무엇이고, 변수'foo'는 무엇입니까? 당신의'invokeMethod' 함수는 두 개의 인수를 가지고 있습니다. 하나를 사용하여 호출합니다. 어쨌든 코드의 인수 중 어느 것도 사용하지 않기 때문에 별 문제가되지 않습니다. –

답변

1

이 도움말을 확인하십시오.

***

function invokeMethod(object, method) { 
 
    // object definitions 
 
    const obj = { 
 
    name: 'kung', 
 
    foo: function(){ 
 
     console.log('foo'); 
 
    } 
 
    }; 
 

 
    // conditional invokation 
 
    switch(object){ 
 
    case "obj": 
 
     if(typeof obj[method] == "function") return obj[method](); 
 
    default: 
 
     console.log("Given object not found!"); 
 
    } 
 
} 
 
// call method 
 
invokeMethod("obj", "foo");
파라미터로 전달 대상물 자체 인 경우 :

function invokeMethod(object, method) { 
 
\t if(typeof object[method] === "function") \t 
 
\t \t object[method](); 
 
\t else 
 
\t \t console.log('Invalid function name!'); 
 
    } 
 
    
 
    invokeMethod({ foo: function() {console.log('foo');} }, 'foo');
invokeMethod (OBJ [foo를]) '의

+0

여기서 객체를 직접 액세스 할 수 없게되며 invokeMethod()를 통해 객체 내부에서 메소드를 호출 할 수 있습니다. –

+0

여기 뭔가 바꿔야한다고 생각합니다. 물론 쿼리가 작동하지만 실시간 실행에서는 obj를 제공하고 해당 객체에서 함수를 검색해야합니다. 만약 당신의 코드를 보면, 당신은 항상 obj const 내에서 함수를 리턴하고 객체 인자는 리턴하지 않습니다. –

+0

예 @KenrySanchez, 나는 그 부분을 놓친 것 같아요, 지적 해 주셔서 고마워요. 내 대답을 업데이트했습니다. 건배. –

0

어쩌면이 도움이됐다.

함수를 살펴 보겠습니다. 인자로 두 개의 요소 objectmethod이 있다는 것을 알았습니다. 그래서, 당신의 기능은 일을 나쁜이

function invokeMethod(object, method) { 
    // code here 
    const obj = { 
    name: 'kung', 
    foo: function(){ 
     console.log('foo'); 
    } 
    }; 
} 

당신이 obj-function을받을려고하는 경우에, 당신은 그냥이 있어야한다

function invokeMethod(method) 

지금, 당신의 예에 따라, 내가 생각하는거야 당신은 정말로 obj-function을 받기를 원합니다. 그래서, 그 경우에, 당신은 이것을해야합니다.

const obj = { 
    name: 'kung', 
    foo: function(){ 
     console.log('foo'); 
    } 
    }; 

function invokeMethod(obj, method) { 
    if((method in obj) && typeof obj[method] ==="function"){ 

    return obj[method](); 
    } 
} 

invokeMethod(obj, 'foo'); 
+0

그랬습니다! 이 솔루션에 어떻게 도달했는지 설명/명확히 해 주시겠습니까? 특히 IF 성명서? Javascript를 독자적으로 배우기 때문에 이것이 내 이해에 도움이 될 것입니다. – babycoder

+0

물론입니다. 개체의 메서드를 찾고 있으므로 쿼리를 수행해야합니다. 이 쿼리는 간단하고 if 문을 사용합니다. 'if'에는'(method in obj)'와'typeof obj [method] === "function"두 가지 연산이 있습니다. 'in' 연산자는 객체에 대한 지식을 위해 사용됩니다.이 경우에는 메소드입니다. 'typeof'는 type 속성에 대한 지식을 위해 사용됩니다. 타입을 문자열로 반환하므로 타입이'function'인지 알아야합니다. 마지막 단계는 찾고있는 함수를 대괄호 표기법으로 반환하는 것입니다. –