1. 함수 이름을 얻기 위한 세 가지 구현 방법
예 1:
JS 권위 가이드에 나온 메소드:
Function.prototype.getName = function(){
return this.name || this.toString().match(/functions*([^(]*)(/)[1]
}
예 2:
현재 함수가 명명된 함수인 경우 해당 이름이 반환됩니다. 익명 함수인 경우 할당된 함수 변수 이름이 클로저에 포함된 경우 "anonymous"가 반환됩니다.
var getFnName = function(callee){
var _callee = callee.toString().replace(/[s?]*/g,""),
Comb = _callee.length >= 50 ? 50 :_callee.length;
_callee = _callee.substring (0,comb);
var name = _callee.match(/^function([^(] ?)(/);
if(name && name[1]){
return name[1 ];
}
var caller = callee.caller,
_caller = caller.toString().replace(/[s?]*/g,"");
var last = _caller.indexOf(_callee),
str = _caller.substring(last-30,last);
name = str.match(/var([^=] ?)=/);
if (name && name[1]){
return name[1]; 함수, 인수 1개 전달 function ee(){
//
var fnname =getFnName(arguments .callee)
//
경고(fnname)
};
ee();
코드 복사
코드는 다음과 같습니다.
function getFuncName(_callee)
{ var _text = _callee.toString();
var _scriptArr = document.scripts; for (var i=0; i<_scriptarr.length i> {
var _start = _scriptArr[i ].text.indexOf(_text);
if (_start != -1)
return _text.match(/^functions*([^(] ). *rn/ )[1];
}
}
}
function a()
{
return getFuncName(arguments.callee);
}
var b = 함수()
{
return getFuncName(arguments.callee);
}
window.alert(a());
window.alert(b());
위의 방법으로 해결할 수 없는 상황이 또 있습니다. 해결하신 분이 조언을 해주셨으면 좋겠습니다.
코드 복사
코드는 다음과 같습니다.
var x =
{ run: function()
{
return getFuncName(arguments.callee); }
}
window.alert(x.run()); 기능을 얻을 수 없습니다.
코드 복사
코드는 다음과 같습니다.
기능 테스트(){
for(var i=0;i
document.write(arguments[i]);
}
2. 객체의 모든 속성 이름과 값을 순회하는 방법