18

私は XULRunner を使用しており、コード サンプルで次のパターンに遭遇しました。

var StrangeSample = {

backingStore : "",

get foo() { return this.backingStore + " "; },

set foo(val) { this.backingStore = val; },

func: function(someParam) { return this.foo + someParam; }
};

StrangeSample.foo = "rabbit";
alert(StrangeSample.func("bear"));

これにより、「うさぎくま」が警告されます。

この get/set パターンが Javascript で使用されているのを見たことがありません。動作しますが、ドキュメントやリファレンスが見つかりません。これは XUL 特有のものなのか、最近の言語機能なのか、それとも単に私が見逃したものなのか? 数か月前にこのようなものを特に探していたのですが、何も見つからなかったので、私は困惑しています.

参考までに、「get」または「set」を削除すると、構文エラーが発生します。それらの名前を他の名前に変更すると、構文エラーになります。それらは本当にキーワードのようです。

誰かが私のためにこれに光を当てることができますか、それとも私を参照に向けることができますか?

4

3 に答える 3

14

Martinho が示唆するように、JS 1.5 のゲッター/セッターを説明するリンクがいくつかあります。

http://ejohn.org/blog/javascript-getters-and-setter/

http://ajaxian.com/archives/getters-and-setter-in-javascript

ただし、それらは IE ではサポートされていないようであり、一部の開発者は、変数の割り当てに副作用があるという考えについて (正当な) 懸念を持っていることに注意してください。

Daniel が指摘するように、get/set は予約済みキーワードではありません。「get」および「set」と呼ばれるトップレベル関数を作成し、上記のコードサンプルと一緒に使用することに問題はありませんでした。したがって、パーサーはこれを可能にするのに十分スマートであると思います。実際、次のことも正当なようです (紛らわしい場合)。

var Sample = {
   bs : "",
   get get() { return this.bs; },
   set get(val) { this.bs = val; }
 }
于 2011-03-24T12:02:19.687 に答える
2

Mozilla によると、それらは ECMAScript にはありません。

于 2011-03-23T17:42:02.267 に答える