우리는 많은 파일들로 분할 된 js 코드를 가지고 있습니다. 우리는 다른 많은 js 파일에서 사용되는 코드를 정의하는 핵심 파일을 가지고 있습니다.eval을 사용하지 않고 멤버 함수를 사용하는 것과 같은 방법으로 문자열을 사용하여 클로저를 참조 할 수 있습니까?
core.js :
window.mycore = function() {
var myfunction1 = function() {
};
var myfunction2 = function() {
};
var myfunction3 = function() {
//..
var a = myfunction1(b);
//..
};
//...
// many "myfunction"
//...
var myfunctionN = function() {
};
var publish = function() {
for(var i = 0; i < arguments.length; i++) {
try {
window.mycore[arguments[i]] = eval('(' + arguments[i] + ')');
}
catch(e) {
Log.err(600, arguments[i], e);
}
}
};
publish("myfunction1", "myfunction7", "myfunction8",/*...*/"myfunctionM")
}
app.js : 없음 핵심 방법은 윈도우의 멤버로서 선언 된 것을
// ...
// ...
var result = window.core.myfunction1("myparam");
// ...
// ...
주
현재 우리는 다음과 같이 있습니다. 핵심 개체. 대신 게시 기능을 사용하여 핵심 개체에 연결됩니다.
이
은 몇 가지 장점이 있습니다. "window.core"핵심 코드 작성의 필요없이 핵심 기능을 참조 할 수 있습니다- 을
- 모든 공용 함수 선언에 "var myfunction = window.mycore.myfunction = function() ..."을 쓰지 마십시오.
- 노출 된 메서드는 중앙 집중식으로 볼 수 있습니다.
그러나 eval 선언을 이해하지 못하기 때문에 게시 기능에서 eval을 사용하면 코드 분석 도구를 사용할 때 문제가 발생합니다.
여기 내 질문이 있습니다. 이 코드를 개선하는 더 좋은 방법은 무엇입니까, 그래서 우리는 언급 된 장점을 유지하면서 평가 선언을 근절 할 수 있습니다. publish ({ 'myfunction1': myfunction1}, ...) 같은 일부 이름/값 쌍을 게시 함수에 보내는 해결책을 알고 있지만 함수 이름 반복을 피하기를 원합니다. 이미 많은 코드가 작성되었으므로 급진적 인 변화를 기대하지 않는다고 생각하십시오.
감사합니다.
myFunc1에서 발생하는 것처럼 함수 이름을 반복하지 않도록하고 싶습니다. myFunc1. 많은 기능이 있다고 생각하십시오. – gztomas
내 편집을 참조하십시오. 당신은 그렇게 할 수 있습니다. 어쨌든 함수 이름을 실제로 반복하는 것 외에도 한 번 선언을하고 게시 함수를 호출하면 안됩니까? – Jaime
그것은 myFunc2에서 myFunc1을 참조하고 싶을 때마다 window.mycore.myFunc1을 작성해야만합니다. – gztomas