6

Google Chrome で JavaScript の例外を調べました。

ここに画像の説明を入力

そして、関数get messageget stackset message、およびに気付きましたset stack。この例外をキャッチしてalert(e.get_message());、エラーを取得するためだけに実行しようとしました。も実行しようとしましたがalert(e.get message());、明らかにスペースが原因で別のエラーが返されました。

これらの不思議なメソッドとは何ですか?開発者はそれらをどのように呼び出しますか?

4

1 に答える 1

7

彼らは財産のアクセサーです。これらは、プロパティを取得または設定したときに実行される効果的な関数です。

e.message; // getter

e.message = "foobar"; // setter

プロパティアクセサーを使用すると、これらはプロパティ値の単純な取得と設定以上のことを行います。オブジェクトのプロパティ記述子で確立されたコードを実行できるため、プロパティへのアクセスに副作用が生じる可能性があります。

例:

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"

特定のプロパティに設定されているプロパティ記述子を表示するには、Object.getOwnPropertyDescriptor...を使用します。

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

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

これらの手法には、ECMAScript5でサポートされている実装が必要であることに注意してください。

于 2012-07-30T20:08:07.593 に答える