2010-12-29 3 views
0

MDC는 이렇게 말한다뿐만 아니라 그들은 그냥 파이어 폭스 확장 생각 말한다 :던진 가치에 따라 어떻게 일을합니까?

라이브 코드 : http://jsfiddle.net/vQsUX/

try { 
    throw("InvalidNameException"); 
} 

catch (e if e == "InvalidNameException") { 
    document.write(e) 
} 

catch (e if e == "InvalidIdException") { 
    document.write(e) 
} 

catch (e if e == "InvalidEmailException") { 
    document.write(e) 
} 

가 어떻게 모든 브라우저에서 작동합니다 비슷한 일을 할 수 있습니까?

답변

2

그냥 객체를 잡아 하나의 catch 블록을 평가 : 예외가

try { 
    // stuff 
} 
catch (exc) { 
    if (exc === "InvalidNameException") { 
    // do something 
    } 
    else if (exc === "whatever") { 
    // do something else 
    } 
} 

때문에 단지 객체, 당신은, 당신은 항상 자신보다 정교한 예외 구조를 당신이 좋아하는 throw 무엇을 개발할 수 있습니다. 예외 객체에는 필요한 코드를 숫자 키와 함께 실행할 수 있습니다. 즉, Javascript에서 정교한 예외 메커니즘을 많이 사용하지는 못했습니다. 그것은 단지 많이 나오지 않는 것 같습니다. 그럼에도 불구하고 :

try { 
    throw("InvalidNameException"); 
} 
catch (e) { 
    switch (e.toString()) { 
     case "InvalidNameException": 
      document.write(e); 
      break; 

     case "InvalidIdException": 
      document.write(e); 
      break; 

     case "InvalidEmailException": 
      document.write(e); 
      break; 
    } 
} 

그것은 파이어 폭스 확장 기능처럼 꽤 아니지만, 거의 같은 일을 :

function riskyCodeHere() { 
    // scary dangerous things 
    if (badThings()) { 
    throw { 
     key: 207, 
     badnessLevel: "terrible", 
     toString: function() { 
     return "Things have gotten " + this.badnessLevel; 
     } 
    }; 
    } 
} 

// ... 

try { 
    riskyCodeHere(); 
} 
catch (b) { 
    switch (b.key) { 
    case 207: console.log(b.toString()); 
    // ... 
    } 
} 
+0

+1, nice! 던지기의이 사용법을 처음 보았습니다! 뭔가 정말 "나쁜"일이 일어나고 있습니다! :-) – ifaour

+0

고마워! 'toString : function() {}'이 어떻게 도움이되는지 물어봐도 될까요? – DarkLightA

+0

오 그냥 그 예 였어. 디버깅 등의 목적으로 유용 할 수 있습니다. 예외 클래스는 자체 로깅 API 또는 이와 유사한 것을 제공 할 수도 있습니다. 요점은 어떤 크기 나 모양의 물건을 던질 수 있다는 것을 보여주는 것이 었습니다. – Pointy

0

당신은 switch 문으로 그것을 할 수 있습니다.

위 내용은 원본을 번역 한 것입니다. 예외가 문자열 일 필요는 없으므로 더 흥미로운 예외가 될 경우 스위치보다 더 재미있는 일을 할 수 있습니다.

try { 
    throw new MyNiftyException(...); 
} 
catch (e) { 
    if (e instanceof MyNiftyException) { 
     // Do something related to that 
    } 
    // etc 
} 
관련 문제