메서드 이름을 문자열로 갖는 개체 메서드를 동적으로 호출 할 수 있습니까? 나는 다음과 같이 상상할 것입니다.
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();
답변
속성 이름이 변수에 저장되어 있으면 []
foo[method]();
답변
객체의 속성은 배열 표기법을 통해 액세스 할 수 있습니다.
var method = "smile";
foo[method](); // will execute the method "smile"
답변
메서드는 eval을 사용하여 호출 할 수있는 방법이
eval("foo." + method + "()");
좋지 않을 수 있습니다.
답변
객체 내부에서 함수를 호출 할 때 함수 이름을 문자열로 제공해야합니다.
var obj = {talk: function(){ console.log('Hi') }};
obj['talk'](); //prints "Hi"
obj[talk]()// Does not work
답변
이에 대한 예를 여기에 남기고 싶습니다. 예를 들면 다음과 같습니다. 양식을 제출하는 동안 동적으로 확인 메서드를 호출하고 싶습니다.
<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;
}
};