2012-07-30 7 views
6

Ich habe eine JavaScript-Ausnahme in Google Chrome untersucht.Was sind diese mysteriösen Methoden einer JavaScript-Ausnahme?

enter image description here

Und ich bemerkte die Funktionen get message, get stack, set message und set stack. Ich habe versucht, diese Ausnahme abzufangen und alert(e.get_message()); nur laufen zu lassen, um einen Fehler zu erhalten. Ich versuchte auch, alert(e.get message()); zu laufen, der offensichtlich einen anderen Fehler wegen des Raumes zurückgab.

Was sind diese mysteriösen Methoden und wie nennt ein Entwickler sie?

+0

Beachten Sie, dass der Eigenschaftszugriff über '.' nur syntaktischer Zucker für die Indexierung über' [...] 'ist. Sie können also einem Objekt eine Methode mit einem Leerzeichen in seinem Namen geben; Aufruf würde so aussehen: 'alert (e ['get message']());' –

Antwort

7

Sie sind Eigentum Accessoren. Sie sind effektiv Funktionen, die ausgeführt werden, wenn Sie die Eigenschaft abrufen oder festlegen.

e.message; // getter 

e.message = "foobar"; // setter 

Mit Eigenschaft Accessoren, diese mehr als nur eine einfache Get und Set der Eigenschaft Wert. Sie können Code ausführen, der in den Eigenschaftsdeskriptoren des Objekts eingerichtet wurde, sodass der Eigenschaftszugriff Nebenwirkungen haben kann.

Beispiel:

var o = Object.create(Object.prototype, { 
    foobar: { 
     get: function() { return "getter"; }, 
     set: function(val) { alert("setter " + val); } 
    } 
}); 

o.foobar; // "getter" 
o.foobar = "raboof"; // alerts "setter raboof" 

Um die Eigenschaftendeskriptoren für eine bestimmte Eigenschaft zu sehen, verwenden Object.getOwnPropertyDescriptor ...

console.dir(Object.getOwnPropertyDescriptor(e, "message")); 

Object 
    configurable: true 
    enumerable: false 
    get: function getter() { [native code] } 
    set: function setter() { [native code] } 

Beachten Sie, dass diese Techniken erfordern eine ECMAScript 5 unterstützt Implementierung.

Verwandte Themen