</head> <body> <h1>Object</h1> <pre class="NoIndent">class Object extends Any</pre> <p><strong>Object</strong>は、他のAutoHotkeyのオブジェクトクラスが派生する基本クラスです。Objectの各インスタンスは、「自身のプロパティ」のセットと、より多くのプロパティが継承されるベースオブジェクトから構成されています。オブジェクトにもメソッドがありますが、これは呼び出すことができるプロパティにすぎません。</p> <p>バリュープロパティとダイナミックプロパティがあります。バリュープロパティは、単に値を含むだけである。ダイナミックプロパティは値を持たず、アクセス方法(get、set、call)に応じて<em>アクセッサ関数</em>を呼び出します。</p> <p>以下、"Obj" はObjectクラスのインスタンスを表すプレースホルダーとして使用します。</p> <p>Objectのインスタンスはすべて<code>Object.Prototype</code>に基づいており、これは<code>Any.Prototype</code>に基づいている。<a href="Any.htm">Any</a>から継承されるメソッドやプロパティに加え、Objectsは以下のような定義済みのメソッドやプロパティを持ちます。</p> <h2 id="toc">目次</h2> <ul class="indent"> <li><a href="#StaticMethods">静的メソッドです</a>: <ul> <li><a href="#Call">Call</a>:新しいObjectを作成します。</li> </ul> </li> <li><a href="#Methods">メソッド</a>: <ul> <li><a href="#Clone">Clone</a>:オブジェクトのシャローコピーを返す。</li> <li><a href="#DefineProp">DefineProp</a>:新しい自身のプロパティを定義する。</li> <li><a href="#DeleteProp">DeleteProp</a>:オブジェクトから自身のプロパティを削除する。</li> <li><a href="#GetOwnPropDesc">GetOwnPropDesc</a>:DefinePropと互換性のある、与えられた自身のプロパティの記述子を返します。</li> <li><a href="#HasOwnProp">HasOwnProp</a>:オブジェクトが指定された名前のプロパティを所有している場合、1 (true)を返します。</li> <li><a href="#OwnProps">OwnProps</a>:オブジェクト自身のプロパティを列挙する。</li> </ul> </li> <li><a href="#Properties">プロパティ</a>: <ul> <li><a href="#Base">Base</a>:オブジェクトのベースオブジェクトを取得または設定する。</li> </ul> </li> <li><a href="#Functions">関数</a>: <ul> <li><a href="#SetBase">ObjSetBase</a>:オブジェクトのベースオブジェクトを設定する。</li> <li><a href="#GetCapacity">ObjGetCapacity</a>、<a href="#SetCapacity">ObjSetCapacity</a>:プロパティを含む Object の容量を取得または設定する。</li> <li><a href="#OwnPropCount">ObjOwnPropCount</a>:オブジェクトに含まれる自身のプロパティの数を取得する。</li> <li>ObjHasOwnProp、ObjOwnProps:対応する定義済みメソッドと同等ですが、オーバーライドすることはできません。</li> </ul> </li> </ul> <h2 id="StaticMethods">静的メソッド</h2> <div class="methodShort" id="Call"><h3>Call</h3> <p>新しいObjectを作成します。</p> <pre class="Syntax">Obj := Object() Obj := Object.<span class="func">Call</span>()</pre> </div> <h2 id="Methods">メソッド</h2> <div class="methodShort" id="Clone"><h3>Clone</h3> <p>オブジェクトのシャローコピーを返す。</p> <pre class="Syntax">Clone := Obj.<span class="func">Clone</span>()</pre> <p>オブジェクトが所有する各プロパティやメソッドは、クローンにコピーされます。オブジェクトの<em>参照</em>がコピーされるのであって、オブジェクトそのものがコピーされるわけではありません。言い換えれば、プロパティにオブジェクトへの参照が含まれている場合、クローンには同じオブジェクトへの参照が含まれます。</p> <p>ダイナミックプロパティはコピーされ、呼び出されることはありません。</p> <p>クローンは、元のオブジェクトと同じベースオブジェクトを持ちます。</p> <p>A TypeError is thrown if <em>Obj</em> is derived from an unsupported built-in type. This implementation of Clone supports Object, Class and Error objects. こちらも参照のこと:<a href="Array.htm#Clone">Clone(Array)</a>、<a href="Map.htm#Clone">Clone(Map)</a>。</p> </div> <div class="methodShort" id="DefineProp"><h3>DefineProp</h3> <p>新しい自身のプロパティを定義する。</p> <pre class="Syntax">Obj := Obj.<span class="func">DefineProp</span>(Name, Descriptor)</pre> <h4 id="DefineProp_Parameters">パラメータ</h4> <dl> <dt>Name</dt> <dd> <p>型:<a href="../Concepts.htm#strings">文字列</a></p> <p>プロパティの名前です。</p> </dd> <dt>Descriptor</dt> <dd> <p>型:<a href="../Concepts.htm#objects">オブジェクト</a></p> <p>以下のいずれかの自プロパティを持つオブジェクト、または<em>Get</em>と<em>Set</em>の両方を持つオブジェクト:</p> <p><strong>Get:</strong>プロパティの値が取得されたときに呼び出される<a href="../misc/Functor.htm">関数オブジェクト</a>です。</p> <p><strong>Set:</strong>プロパティに値が割り当てられたときに呼び出される<a href="../misc/Functor.htm">関数オブジェクト</a>です。その第2パラメータは、割り当てられる値である。</p> <p><strong>Call:</strong>プロパティが呼び出されたときに呼び出される<a href="../misc/Functor.htm">関数オブジェクト</a>です。</p> <p><strong>Value:</strong>プロパティに割り当てる任意の値。</p> </dd> </dl> <h4 id="DefineProp_Return_Value">戻り値</h4> <p>型:<a href="../Concepts.htm#objects">オブジェクト</a></p> <p>This method returns the target object.</p> <h4 id="DefineProp_Remarks">備考</h4> <p>この方法は、バリュープロパティをダイナミックプロパティに、またはその逆に変換するために使用することができますが、バリューとアクセッサ関数の両方を指定することはできません。</p> <p>アクセサー関数を省略した場合、動作はベースオブジェクトから継承されます。</p> <ul> <li>継承された値プロパティは、値を返すか呼び出すか、あるいは<code>this</code>に新しい値を格納するアクセッサ関数のセットと同等です。新しい値は、<code>this</code>自体の動的プロパティを上書きし、継承されたアクセッサ関数を上書きすることに注意してください。</li> <li><em>Set</em>や値が定義されていない、または継承されていない場合、プロパティを設定しようとすると例外が発生します。</li> <li><em>Call</em>が定義または継承されていない場合、<em>Get</em>を呼び出して関数オブジェクトを取得し、その関数オブジェクトを呼び出すことができます。</li> <li><em>Get</em>が定義または継承されていないが、<em>Call</em>アクセサ関数が存在する場合、その関数自体がプロパティの値となります(読み取り専用)。</li> </ul> <p>メソッドと同様に、<em>Get</em>、<em>Set</em>、<em>Call</em>の第1パラメータは<code>this</code>(対象オブジェクト)です。<em>Set</em>の場合、第2パラメータは<code>value</code>(割り当てられる値)です。これらのパラメータは、クラス内のメソッドやプロパティ定義によって自動的に定義されますが、通常の関数を使用する場合は明示的に定義する必要があります。呼び出し元から渡された他のパラメータは、パラメータリストに追加されます。</p> <p>関数オブジェクトの<a href="Func.htm#MaxParams">MaxParams</a>および<a href="Func.htm#IsVariadic">IsVariadic</a>プロパティが評価され、そのプロパティがパラメータを受け入れることができるかどうかが決定されます。MaxParamsが<em>Get</em>が 1、<em>Set</em>が 2 で、IsVariadicが false または undefined の場合、このプロパティはパラメータを受け取ることができません; これらは、代わりに <em>get</em> によって返されたオブジェクトの <a href="../Objects.htm#__Item">__Item</a> プロパティに転送されます。</p> </div> <div class="methodShort" id="DeleteProp"><h3>DeleteProp</h3> <p>オブジェクトから自身のプロパティを削除する。</p> <pre class="Syntax">RemovedValue := Obj.<span class="func">DeleteProp</span>(Name)</pre> <h4 id="DeleteProp_Parameters">パラメータ</h4> <dl> <dt>Name</dt> <dd> <p>型:<a href="../Concepts.htm#strings">文字列</a></p> <p>プロパティ名です。</p> </dd> </dl> <h4 id="DeleteProp_Return_Value">戻り値</h4> <p>型:<a href="../Concepts.htm#values">任意</a></p> <p>This method returns the value of the removed property (blank if none).</p> </div> <div class="methodShort" id="GetOwnPropDesc"><h3>GetOwnPropDesc</h3> <p><a href="#DefineProp">DefineProp</a>と互換性のある、与えられた自身のプロパティの記述子を返します。</p> <pre class="Syntax">Descriptor := Obj.<span class="func">GetOwnPropDesc</span>(Name)</pre> <h4 id="GetOwnPropDesc_Parameters">パラメータ</h4> <dl> <dt>Name</dt> <dd> <p>型:<a href="../Concepts.htm#strings">文字列</a></p> <p>プロパティ名です。</p> </dd> </dl> <h4 id="GetOwnPropDesc_Return_Value">戻り値</h4> <p>型:<a href="../Concepts.htm#objects">オブジェクト</a></p> <p>動的プロパティの場合、戻り値は、各アクセッサ関数に対応する独自のプロパティを持つ新しいオブジェクトになります:<em>Get</em>、<em>Set</em>、<em>Call</em>。各プロパティは、対応するアクセサー関数が<em>Obj</em>自身に定義されている場合にのみ存在します。Valueプロパティの場合、<em>Value</em>という名前のプロパティを持つ新しいオブジェクトが返り値となる。このような場合、<code>Obj.GetOwnPropDesc(Name).Value == Obj.%Name%</code>。</p> <p>返されたオブジェクトを変更しても、<a href="#DefineProp">DefineProp</a>が呼び出されない限り、<em>Obj</em>には何の影響もない。</p> <h4 id="GetOwnPropDesc_Error_Handling">エラー処理</h4> <p><em>Obj</em>がその名前のプロパティを所有していない場合、<a href="Error.htm#PropertyError">PropertyError</a>が投げられる。スクリプトは、<code>not desc.HasProp("Value")</code> をチェックすることによって、プロパティが動的かどうかを判断することができます。<em>desc</em>は、GetOwnPropDescの戻り値です。</p> </div> <div class="methodShort" id="HasOwnProp"><h3>HasOwnProp</h3> <p>Returns 1 (true) if an object owns a property by the specified name, otherwise 0 (false).</p> <pre class="Syntax">HasOwnProp := Obj.<span class="func">HasOwnProp</span>(Name)</pre> <p>また、このメソッドのデフォルトの実装は、関数として定義されています:<code>ObjHasOwnProp(Obj, Name)</code>。</p> </div> <div class="methodShort" id="OwnProps"><h3>OwnProps</h3> <p>オブジェクト自身のプロパティを列挙する。</p> <pre class="Syntax">For Name <span class="optional">, Value</span> in Obj.<span class="func">OwnProps</span>()</pre> <p>This method returns a new <a href="Enumerator.htm">enumerator</a>. 列挙子は通常、<a href="For.htm">forループに</a>直接渡され、ループの反復ごとに列挙子を1回呼び出します。列挙者を呼び出すたびに、次のプロパティ名や値が返されます。forループの変数は、列挙者のパラメータに対応しており、次のようになっています:</p> <dl> <dt>Name</dt> <dd> <p>型:<a href="../Concepts.htm#strings">文字列</a></p> <p>プロパティの名前です。</p> </dd> <dt>Value</dt> <dd> <p>型:<a href="../Concepts.htm#values">任意</a></p> <p>プロパティの値です。</p> <p>プロパティにゲッターメソッドがある場合は、そのメソッドを呼び出して値を取得します(<em>Value</em>が省略された場合を除く)。</p> </dd> </dl> <p>ダイナミックプロパティは、列挙に含まれます。但し:</p> <ul> <li>オブジェクト自身のプロパティのみが列挙されるため、プロパティは<em>Obj</em>で直接定義する必要があります。</li> <li>最初の変数のみが指定された場合、そのプロパティの名前が返され、そのゲッターは呼び出されない。</li> <li>2つの変数が指定された場合、列挙者はプロパティのゲッターを呼び出して値の取得を試みる。 <ul> <li>ゲッターにパラメータが必要な場合、そのプロパティはスキップされます。</li> <li><em>Obj</em>自身がこのプロパティのゲッターを定義していない場合、スキップされます。 <p class="warning"><strong>注:</strong>メソッド定義で定義されたプロパティは、通常ゲッターを持たないため、スキップされます。</p> </li> <li><em>Obj</em>がクラスプロトタイプオブジェクトの場合、ゲッターは呼ばれるべきでなく(場合によっては呼べない)、そのためプロパティはスキップされます。</li> <li>ゲッターが例外をスローした場合、その例外は伝播される(抑制されない)。呼び出し側は、列挙子への参照を保持している場合にのみ、次のプロパティで列挙を続けることができます(つまり、列挙子を直接forループに渡した場合は、forループがアボートしたときに列挙子が解放されるため、列挙子を渡さない)。</li> </ul> </li> </ul> <p>プロパティゲッターを呼ばずに自分のプロパティを列挙したり、型に関係なくすべてのプロパティを列挙するには、forループやenumeratorに単一の変数のみを渡します。<a href="#GetOwnPropDesc">GetOwnPropDesc</a>は、値プロパティと動的プロパティを区別するために使用でき、同時に値またはゲッター/セッター/メソッドを取得することもできます。</p> <p>なぜなら、プロパティの評価は、通常、オブジェクトに対応するゲッターや値があるかどうか(同じオブジェクトかベースオブジェクトのいずれか)に依存するからです。2つの変数が指定された場合の矛盾を避けるため、OwnPropsは<em>Call</em>アクセサー関数のみを持つ自身のプロパティをスキップする。事例:</p> <ul> <li>OwnPropsはゲッターが定義されていない場合、メソッドそのものを返すので、ゲッターを定義するとメソッドが返されなくなります。2変数モードでメソッドを取得するスクリプトは、いくつかのメソッドを見逃すことになります。</li> <li>ゲッターがベースオブジェクトによって定義されている場合に、OwnPropsがメソッド自体を返すと、プロパティの通常の評価と矛盾することになります。</li> </ul> <p>また、このメソッドのデフォルトの実装は、関数として定義されています:<code>ObjOwnProps(Obj)</code>。</p> </div> <h2 id="Properties">プロパティ</h2> <div class="methodShort" id="Base"><h3>Base</h3> <p>オブジェクトの<a href="../Objects.htm#delegation">ベースオブジェクト</a>を取得または設定する。</p> <pre class="Syntax">CurrentBaseObj := Obj.<span class="func">Base</span></pre> <pre class="Syntax">Obj.<span class="func">Base</span> := NewBaseObj</pre> <p><em>NewBaseObj</em>は Object でなければなりません。</p> <p>新しいベースを割り当てると、オブジェクトのネイティブタイプが変更される場合は、例外がスローされます。オブジェクトのネイティブタイプは、<code>Object.Prototype</code>や <code>Array.Prototype</code>などの組み込みクラスに属する、最も近いプロトタイプオブジェクトによって決定されます。例えば、Arrayのインスタンスは必ず<code>Array.Prototype</code>から直接または間接的に派生していなければならない。</p> <p>プロパティやメソッドはベースオブジェクトから動的に継承されるため、オブジェクトのベースを変更すると、継承されたプロパティやメソッドを利用できるものも変更されます。</p> <p>このプロパティは<a href="Any.htm">Any</a>から継承されますが、Objectのインスタンスに対してのみ設定することができます。</p> <p>こちらも参照のこと:<a href="Any.htm#GetBase">ObjGetBase</a>、<a href="#SetBase">ObjSetBase</a></p> </div> <h2 id="Functions">関数</h2> <h3 id="SetBase">ObjSetBase</h3> <p>オブジェクトの<a href="../Objects.htm#delegation">ベースとなるオブジェクト</a>を設定します。</p> <pre class="Syntax"><span class="func">ObjSetBase</span>(Obj, BaseObj)</pre> <p><a href="../Objects.htm#Meta_Functions">メタファンクション</a>や <a href="../Objects.htm#Custom_Classes_property">プロパティファンクション</a>は呼び出されません。<a href="#Base">Base</a>プロパティをオーバーライドしても、この関数の動作に影響はありません。</p> <p><em>Obj</em>または<em>BaseObj</em>が不正な型である場合、例外が発生します。</p> <p>See also: <a href="Any.htm#GetBase">ObjGetBase</a>, <a href="#Base">Base property</a></p> <h3 id="OwnPropCount">ObjOwnPropCount</h3> <p>オブジェクトが所有するプロパティの数を返します。</p> <pre class="Syntax">Count := <span class="func">ObjOwnPropCount</span>(Obj)</pre> <h3 id="SetCapacity">ObjSetCapacity</h3> <p>オブジェクトの内部配列である自プロパティの現在の容量を設定します。</p> <pre class="Syntax">MaxProps := <span class="func">ObjSetCapacity</span>(Obj, MaxProps)</pre> <h4 class="func_section" id="SetCapacity_Parameters">パラメータ</h4> <dl> <dt>MaxProps</dt> <dd> <p>型:<a href="../Concepts.htm#numbers">整数</a></p> <p>新しい容量です。現在の自プロパティの数より少ない場合、その数が代わりに使用され、未使用のスペースは解放されます。</p> </dd> </dl> <h4 class="func_section" id="SetCapacity_Return_Value">戻り値</h4> <p>型:<a href="../Concepts.htm#numbers">整数</a></p> <p>This function returns the new capacity.</p> <h4 class="func_section" id="SetCapacity_Error_Handling">エラー処理</h4> <p><em>Obj</em>が不正な型である場合は例外が発生します。</p> <h3 id="GetCapacity">ObjGetCapacity</h3> <p>オブジェクトの内部配列のプロパティの現在の容量を返します。</p> <pre class="Syntax">MaxItems := <span class="func">ObjGetCapacity</span>(Obj)</pre> <p><em>Obj</em>が不正な型である場合は例外が発生します。</p> </body> </html>