2014-03-03 1 views
0

: 사용자 지정 특성을 읽을 수있는 가장 좋은 방법, 그리고 자바 스크립트의 실행 방법으로 변환 할 무엇사용자 정의 태그의 값에서 함수를 작성하는 속성 요소를 감안할 때

<div id='adiv' customAttr='myFuncToExecute'></div> 

. 저는 현재 new Function() 생성자를 사용하고 있습니다 :

if ($('#adiv').attr('customAttr')) { 
    var myFuncV1 = new Function('return ' + $('#adiv').attr('customAttr') + '()'); 
    var myFuncV2 = new Function($('#adiv').attr('customAttr')); 
} 

myFuncV1

myFuncV1()로 실행 될 것입니다. 또한, 나는 이벤트 핸들러 바인딩에 myFuncV2를 사용할 수 있어요 :

$('#adifferentdiv').click(myFuncV2); 

이 내가 필요에 대한 작업을 수행하지만, new Function() 생성자를 사용하여 eval()을 사용하는 것과 같습니다.

질문 : 스크립트의 다른 곳에서 사용되는 메서드 이름을 포함하는 사용자 지정 특성을 읽고 평가하는 데 더 좋은 방법이 있습니까?

도움을 미리 감사드립니다. 당신은, 예를 호출하기 전에 obj[$('#adiv').attr('customAttr')]가 존재하는지 테스트 할 수 있지만

var obj = {someMethod: function(){...}}; 

obj[$('#adiv').attr('customAttr')](); 

:

답변

1

는 객체의 메서드 속성, 당신은 새로운 기능 접근 방식을 제거 할 수 있는지 확인

var fn = obj[$('#adiv').attr('customAttr')]; 

if (fn) fn(); 
+0

감사합니다. 나는 이것이 정확히 내가 찾고있는 것이라고 확신한다. 빠른 부작용 : 메서드가 매개 변수를 받아들이는 곳에서이 작업을 수행 할 수있는 방법이 있습니까? 나는 같은 것을 가정한다 : var obj = {someMethod : function (param1, param2) {...}};'? – Bic

+0

여기서 * param1 *은 전역 변수가 아닌 변수의 이름을 나타내는 문자열입니다. 대괄호 표기법이있는 문자열을 사용하여 객체의 명명 된 속성에 액세스 할 수 있습니다. 전역 변수는 브라우저 (브라우저의 윈도우) 전역 속성으로 만들어진 특수한 경우입니다. 함수 실행 컨텍스트의 "변수 개체"또는 [* 환경 레코드 *] (http://ecma-international.org/ecma-262/5.1/#sec-10.2.1) 이후 다른 변수에는 해당하지 않습니다 직접 액세스 할 수 없습니다). – RobG

관련 문제