0

私は GNOME シェルの JavaScript インターフェイスを調べていてpopupMenu.js、クラスのプロトタイプから次のスニペット (興味のある人向け) に気付きました。

PopupSwitchMenuItem.prototype = {
    __proto__: PopupBaseMenuItem.prototype,

    _init: function(text, active, params) {
        ... (code)
    },

    ... function definitions

    get state() {
        return this._switch.state;
    },

    ... more functions
};

誰かが私にそのget state() { ... }意味を説明できますか? name: valueすべてがJavaScript オブジェクト内のフォームでなければならないと思いましたか? (これらのオブジェクトのいずれかを作成obj.stateすると、私が想定しているものを返すことができますthis._switch.state)。

GNOME は、Mozilla の Spidermonkey に似たフレーバーの javascript (gjs) を使用していると言っていることに注意してください。この動作は非標準の javascript の動作であり、spidermonkey/gjs の機能ですか?

また、これに関するドキュメントはありますか?

4

1 に答える 1

1

https://developer.mozilla.org/en/JavaScript/Reference/Operators/getとhttp://ejohn.org/blog/javascript-getters-and-setters/にある John Resig の投稿を確認してください。

興味深いのは、動的に作成されることを除いて、他のプロパティと同じようにプロパティにアクセスすることです...例では

foo = {
  get blah() {
    return "bar";
  }
}

foo.blah == "bar"

ネイティブのゲッターがなければ、foo.blah(). 率直に言って、IE8 がサポートしていないという理由だけでそれらを使用したことはなく、その利点はほんのわずかです。最も一般的には、foo.blah のような「ダム」プロパティから始めて、開発サイクルのある時点で、foo.blah() が必要であることに気付き、変換を行う必要がある状況で、それらが役立つことがわかります。 getter と setter の場合、オブジェクト定義を変更するだけなので、そのような変換は必要ありません。

于 2012-05-01T05:47:44.823 に答える