プロパティ自身も一つのオブジェクトです。しかし、なんらかのオブジェクトに登録されている場合は、普通のアクセス方法ではプロパティハンドラが呼ばれるだけであり、プロパティオブジェクトそのものにはアクセスできません。
プロパティオブジェクトそのものを取り出すには
&
演算子を使います。取り出したプロパティオブジェクトはローカル変数に入れることが出来ます。
また、
&
演算子を使ってプロパティオブジェクトを登録することもできます。
例:
property prop
{
(略)
}
{
var p = ∝
&object.property1 = p;
}
&
演算子を使うと、ゲッターやセッターは呼ばれずにプロパティオブジェクトそのものにアクセスする事ができます。
&
演算子を使わなければ通常のプロパティへのアクセスとなります。
ローカル変数として取り出したプロパティオブジェクトは、オブジェクトに登録しなくとも、
*
演算子を用いてプロパティハンドラを呼び出すことができます。
例:
property prop
{
(略)
}
{
var p = ∝
*p = 30;
func(*p);
}
Note
上記のように var 変数にプロパティオブジェクトをとる場合は、変数はローカル変数にしてください。これは、プロパティオブジェクトはいったんオブジェクトに登録されると、プロパティオブジェクトとしてではなくプロパティとしてゲッターやセッターを介した動作をするようになるためです。つまり、ローカル変数ではなく、グローバル変数(=globalのメンバ)やオブジェクトのメンバにプロパティオブジェクトを登録してしまうと、普通のプロパティと同じように振る舞うようになります。もちろんこのようにしてグローバル変数やオブジェクトのメンバに登録したプロパティオブジェクトを取り出すために & 演算子を使うのはかまいません。
プロパティオブジェクトに対して instanceof 演算子を "Property" を伴って使用した場合は真になります(上記の例で言うと、&prop instanceof "Property" は真)。