Prototype 소스를 보던 중 신기한게 있어서 적는다.
노파심에 적지만, 이미 고수분들은 아는 사실일 가능성이 크므로 지루해 하지 않는 조건하에만 읽기 바란다.
우리가 일반적으로 함수를 선언할 때 다음과 같이 선언한다.
function Add(a, b) {
return a + b;
}
그러면 당연하게도(?) Add형은 function이 된다.
그렇다면.. 이렇게 한다면?
function Add(a, b) {
return a + b;
}
Add.myvalue = 10;
놀랍게도(?) Add라는 함수가 정상적인 작동을 하면서, myvalue까지 저장하고 있는 것을 볼 수 있다.
즉, function이 object와 같이 동작을 하는 것이다!
그렇다면 Function은 무엇인가?
Function은 보시다시피 앞이 대문자이다. 즉 객체라는것.
그렇다면 Function은 어떻게 사용할까?
var add;
add = Function('a', 'b', 'return a + b');
와 같이 사용할 수 있다. 이렇게 함으로 써, eval()을 사용하지 않고도 동적인 함수를 만들 수 있는데,
var add;
var operator;
operator = '+';
add = Function('a', 'b', 'return a' + operator + 'b');
같은 동적 함수생성이 가능하다.
이런건 eval()을 써도 같은 기능을 하는 것을 만들 수 있지만,
객체라는 차원에서 지원되는게 아닐까 한다.
Posted by 장현준


