자바 스크립트는 문자열에서 동적으로 객체 메소드를 호출합니다.


94

메서드 이름을 문자열로 갖는 개체 메서드를 동적으로 호출 할 수 있습니까? 나는 다음과 같이 상상할 것입니다.

var FooClass = function() {
    this.smile = function() {};
}

var method = "smile";
var foo = new FooClass();

// I want to run smile on the foo instance.
foo.{mysterious code}(); // being executed as foo.smile();

답변:


211

속성 이름이 변수에 저장되어 있으면 []

foo[method]();

1
함수 내에서 변수를 사용하여 작동하지 않습니다 .const genericResolver = (table, action, values) => {return Auth.isAuthenticated () .then (() => {return eval (table) .findAll ()
stackdave

클래스 내의 다른 메서드에서 메서드를 실행하려면 this [ 'methodName'] ()를 사용하십시오.
schlingel

2
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'FooClass'다른 사람 이 못생긴 오류를 받고 있습니까?
Anand Rockzz 19

33

객체의 속성은 배열 표기법을 통해 액세스 할 수 있습니다.

var method = "smile";
foo[method](); // will execute the method "smile"

3

메서드는 eval을 사용하여 호출 할 수있는 방법이 eval("foo." + method + "()"); 좋지 않을 수 있습니다.


내 경우에는 유용한 곳 foo이다 { fields: [{ id: 1 }] }하고 method있다 fields[0]?.id,하지만 난 제거해야 ()당신의 제안 된 답변에서
Rorrim

3

객체 내부에서 함수를 호출 할 때 함수 이름을 문자열로 제공해야합니다.

var obj = {talk: function(){ console.log('Hi') }};

obj['talk'](); //prints "Hi"
obj[talk]()// Does not work

2
컨텍스트에서 이해할 수 있도록 코드에 대한 주석을 제공하는 것이 항상 도움이됩니다.
Phil Cooper

댓글을 추가했습니다. 감사!
sn

-1

이에 대한 예를 여기에 남기고 싶습니다. 예를 들면 다음과 같습니다. 양식을 제출하는 동안 동적으로 확인 메서드를 호출하고 싶습니다.

<form data-before-submit="MyObject.myMethod">
    <button type="submit">Submit</button>
</form>
$('form').on('submit', function(e){

    var beforeSubmit = $(this).attr('data-before-submit');

    if( beforeSubmit ){

       params = beforeSubmit.split(".");
       objectName = params[0];
       methodName = params[1];

       result = window[objectName][methodName]($(this));

       if( result !== true ){
           e.preventDefault();
       }

    }

});
var MyObject = {
    myMethod = function(form){
        console.log('worked');
        return true;
    }
};
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.