자체 내에서 클래스 함수 이름 가져 오기

을 사용하여 typescript 프로그램에서 로깅을 설정하려고합니다 log4javascript.

그러나 수동으로 입력하는 대신 리플렉션을 사용하여 함수 이름을 검색하는 방법을 모릅니다.

이상적으로는 내가하는 일을 에뮬레이트하고 싶습니다 C#.

public class Foo 
{
    private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(Foo));

    public Foo()
    {
    }

    public FooMethod()
    {
        try {
            logger.Logger.Log(this.GetType(), log4net.Core.Level.Trace, "Entering" + MethodBase.GetCurrentMethod().Name, null);
            // code
        }
        catch (e) {
            logger.Logger.Log(this.GetType(), log4net.Core.Level.Debug, ex.Message, null);
        }
        finally {
            logger.Logger.Log(this.GetType(), log4net.Core.Level.Trace, "Exiting" + MethodBase.GetCurrentMethod().Name, null);
        }
    }
}

에서 어떻게 할 수 Typescript있습니까? 내가 할 수있는 일은 클래스 이름을 얻는 것뿐입니다.

class Foo {
    private static logger: log4javascript.Logger = log4javascript.getLogger(getName(Foo));

    constructor() {
    }

    FooFunction() {
        try {
            SymDataSource.logger.trace("Entering: " + getName(Foo.prototype.FooFunction));
            // code
        } catch (e) {
            SymDataSource.logger.debug("Exception: " + getName(Foo.prototype.FooFunction), e);
        } finally {
            SymDataSource.logger.trace("Exiting: " + getName(Foo.prototype.FooFunction));
        }
    }
}

function getName(obj: any): string {
   if (obj.name) {
       return obj.name;
   }
   var funcNameRegex = /function (.{1,})\(/;
   var results = (funcNameRegex).exec((<any> obj).constructor.toString());
   return (results && results.length > 1) ? results[1] : "";
}

클래스 이름은 올바르게 반환되지만 함수는 "Function"으로 반환됩니다.

Basarat

멤버 함수의 경우 toString프로토 타입 함수가 생성되는 방식 때문에 실제로 간단한 구문 분석 방법 을 사용할 수 없습니다 . 예 :

Foo.prototype.FooFunction = function () {
    return getName(this.FooFunction);
};

여기에 toString당신에게 줄 것입니다 :

function () {
    return getName(this.FooFunction);
};

그리고 사이에 함수 이름이 없음을 알 수 있습니다 function () {.

당신이 할 수있는 것은 인라인 함수를 만들고 (예를 들어 굉장한 뚱뚱한 화살표를 사용하여 return getName(()=>this.FooFunction);) 함수 이름을 찾기 위해이 지역 함수 본문을 파싱하는 것입니다. 이런 식으로 여전히 TypeSafe이며 이름 바꾸기 리팩토링을 수행하면 동기화되지 않는 매직 문자열이 없습니다. 따라서 완전한 구현은 다음과 같습니다.

class Foo { 
    static className = getName(Foo);    
    constructor() {
    }
    FooFunction() {        
            return getName(()=>this.FooFunction);            
    }
}

function getName(obj: any): string {    
    if (obj.name) {
        return obj.name;
    }

    var funcNameRegex = /function (.{1,})\(/;   
    var results = (funcNameRegex).exec(obj.toString());
    var result = results && results.length > 1 && results[1];

    // Check to see custom implementation
    if(!result){
        funcNameRegex = /return _this.(.*);/;
        results = (funcNameRegex).exec(obj.toString());
        result = results && results.length > 1 && results[1];
    }
    return result || "";
}

console.log(Foo.className);
var foo = new Foo();
console.log(foo.FooFunction());

다음을 출력합니다.

Foo
FooFunction

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Python은 클래스 내에서 변수 이름 가져 오기

분류에서Dev

클래스 수준에서 클래스 이름 가져 오기

분류에서Dev

특수 매개 변수에서 내보내기 함수 내 TypeScript의 클래스 이름 가져 오기

분류에서Dev

자바 스크립트에서 함수 이름 가져 오기

분류에서Dev

함수 내에서 개체 이름 가져 오기

분류에서Dev

PHP에서 함수가 호출 된 클래스 이름 가져 오기

분류에서Dev

클래스 개체 유형에서 DbSet 이름 가져 오기

분류에서Dev

PHP에서 텍스트 문자열로 함수 이름 목록 가져 오기

분류에서Dev

클래스 정의 내에서 클래스 이름 가져 오기

분류에서Dev

부모 메서드에서 자식 클래스 이름 가져 오기

분류에서Dev

Typescript의 매개 변수를 사용하여 메서드 이름이라는 자식 클래스 가져 오기

분류에서Dev

내 사용자 정의 클래스 Symfony2에서 컨테이너 매개 변수 가져 오기

분류에서Dev

C # 사용자 입력에서 클래스 이름 가져 오기

분류에서Dev

C # 사용자 입력에서 클래스 이름 가져 오기

분류에서Dev

자바 : 추상 클래스 내에서 확장 클래스의 이름을 가져 오는 메소드 생성

분류에서Dev

PHP 부모 클래스 차이에서 자식 클래스 이름 가져 오기

분류에서Dev

C ++ 클래스에서 빌드 된 개체 수 가져 오기

분류에서Dev

mocha의 afterEach 함수에서 테스트 이름 가져 오기

분류에서Dev

클래스 이름이 같은 체크 박스 그룹에서 현재 체크 박스 값 가져 오기

분류에서Dev

webdriver-특정 div에 포함 된 모든 클래스 이름에 대한 개수 가져 오기

분류에서Dev

컨테이너 클래스에서 한정자 가져 오기

분류에서Dev

함수 내에서 폴더 이름 가져 오기

분류에서Dev

libclang 커서에서 클래스 이름 가져 오기

분류에서Dev

Singleton 메서드에서 클래스 이름 가져 오기

분류에서Dev

TypeScript에서 클래스 메서드 이름 가져 오기

분류에서Dev

개체 인스턴스화에서 생성자에 변수 이름 가져 오기

분류에서Dev

클래스 이름 내에서 셀레늄 href로 태그 가져 오기

분류에서Dev

색상 클래스에서 색상 이름 가져 오기

분류에서Dev

Swift-MetaType에서 클래스 이름 가져 오기?

Related 관련 기사

  1. 1

    Python은 클래스 내에서 변수 이름 가져 오기

  2. 2

    클래스 수준에서 클래스 이름 가져 오기

  3. 3

    특수 매개 변수에서 내보내기 함수 내 TypeScript의 클래스 이름 가져 오기

  4. 4

    자바 스크립트에서 함수 이름 가져 오기

  5. 5

    함수 내에서 개체 이름 가져 오기

  6. 6

    PHP에서 함수가 호출 된 클래스 이름 가져 오기

  7. 7

    클래스 개체 유형에서 DbSet 이름 가져 오기

  8. 8

    PHP에서 텍스트 문자열로 함수 이름 목록 가져 오기

  9. 9

    클래스 정의 내에서 클래스 이름 가져 오기

  10. 10

    부모 메서드에서 자식 클래스 이름 가져 오기

  11. 11

    Typescript의 매개 변수를 사용하여 메서드 이름이라는 자식 클래스 가져 오기

  12. 12

    내 사용자 정의 클래스 Symfony2에서 컨테이너 매개 변수 가져 오기

  13. 13

    C # 사용자 입력에서 클래스 이름 가져 오기

  14. 14

    C # 사용자 입력에서 클래스 이름 가져 오기

  15. 15

    자바 : 추상 클래스 내에서 확장 클래스의 이름을 가져 오는 메소드 생성

  16. 16

    PHP 부모 클래스 차이에서 자식 클래스 이름 가져 오기

  17. 17

    C ++ 클래스에서 빌드 된 개체 수 가져 오기

  18. 18

    mocha의 afterEach 함수에서 테스트 이름 가져 오기

  19. 19

    클래스 이름이 같은 체크 박스 그룹에서 현재 체크 박스 값 가져 오기

  20. 20

    webdriver-특정 div에 포함 된 모든 클래스 이름에 대한 개수 가져 오기

  21. 21

    컨테이너 클래스에서 한정자 가져 오기

  22. 22

    함수 내에서 폴더 이름 가져 오기

  23. 23

    libclang 커서에서 클래스 이름 가져 오기

  24. 24

    Singleton 메서드에서 클래스 이름 가져 오기

  25. 25

    TypeScript에서 클래스 메서드 이름 가져 오기

  26. 26

    개체 인스턴스화에서 생성자에 변수 이름 가져 오기

  27. 27

    클래스 이름 내에서 셀레늄 href로 태그 가져 오기

  28. 28

    색상 클래스에서 색상 이름 가져 오기

  29. 29

    Swift-MetaType에서 클래스 이름 가져 오기?

뜨겁다태그

보관