2013-05-05 5 views
5

mia abitudine Classe di errore:JavaScript personalizzato Error.toString()

function MyError(message) { 
    this.message = message || ""; 
} 

MyError.prototype   = new Error(); 
MyError.prototype.name  = "MyError"; 
MyError.prototype.toString = function() { 
    return "[" + this.name + "] " + this.message; 
}; 

Se corro throw new MyError("test") allora console FF/IE mostra un messaggio di default invece dei previsti [MyError] test.

Come si ottiene il motore JS per utilizzare il metodo toString()?

+0

Non dovrebbe essere "MyError.prototype = Error.prototype'? – fardjad

+1

Una soluzione sarebbe quella di non ereditare da errore. –

+1

@fardjad nope [vedi qui] (http://stackoverflow.com/a/871646/1711500) –

risposta

0

Potrei sbagliarmi, ma penso che l'output della console in questo caso sia controllato dal motore JS, e quindi non è possibile formattarlo come ho fatto sopra.

+0

Sì, probabilmente è vero. Ma perché vorresti cambiarlo comunque? – Bergi

+0

Qualche altro strumento che sta analizzando l'output. Dovrò cambiarlo. –

+0

Puoi mostrarci questo strumento? Sono sicuro che ci sia una soluzione migliore. – Bergi

3

Questo è come vorrei ereditare Error (testato e funzionante su FF v20):

function MyError(message) { 
    this.message = message || ""; 
} 

MyError.prototype = Object.create(Error.prototype); // see the note 
MyError.prototype.name = "MyError"; 
MyError.prototype.toString = function() { 
    return "[" + this.name + "] " + this.message; 
} 

console.log(new MyError("hello").toString()); // "[MyError] hello" 

Nota che i vecchi browser potrebbe non supportare Object.create (ES5 sintassi), è possibile utilizzare this shim per fallo funzionare.

+0

Sfortunatamente questo non mostra il comportamento previsto quando si esegue questa operazione: 'lanciare un nuovo MyError (" ciao ");' mostra ancora un messaggio predefinito. Il modo sopra elencato è funzionalmente equivalente a questo, ma un po 'più sicuro. Ho la sensazione che questo abbia a che fare con il motore JS del browser e quindi non posso cambiarlo. –

+0

In realtà 'gettare nuovo MyError ('ciao')' funziona bene per me in ** FF **. – fardjad

+0

Funziona, ma non mostra la stringa personalizzata. –

Problemi correlati