= 既存オブジェクトへの汚染 = このライブラリは既存オブジェクトに次のプロパティを作成します。 ==== 1. グローバルオブジェクトにAelプロパティを作成 ==== Aelプロパティはライブラリを読み込み時にグローバルオブジェクトに作成します。このプロパティとその配下にはAelの機能が全て含まれています。なお、このライブラリはグローバルオブジェクトにAelプロパティがある事を前提に作られている為、他の名称に変更することはできません。万が一、他のライブラリと衝突した場合は相手の名称を変更するか、どちらかを捨てる事になります。 ==== 2. 関数呼び出し時、スコープに関数を設定する一時プロパティを作成 ==== NN4またはFunction.prototype.applyが実装されていない環境でAelの関数呼び出し機能を実行すると、スコープオブジェクト(関数内でthisで参照するオブジェクト)に"$aelx"(xはプロパティ名をユニークにする任意の数字)という名称のプロパティを作成します。このプロパティはapply関数のscope指定を実現するためのもので、関数呼び出し後にdelete演算子で削除します(※)。関数内でthisのプロパティをfor inで取得するとプロパティが含まれるので注意してください。 ※IE4.0~5.0ではスコープがグローバルオブジェクトの場合、delete演算子で削除するとエラーとなる為、スコープがグローバルオブジェクトの場合に限り未定義値で初期化します。プロパティは削除されませんので注意してください。 ==== 3. !RegExp.prototype.constructorプロパティに!RegExpを設定 ==== 実行環境がRhinoの場合は!RegExp.prototype.constructorプロパティに!RegExpを設定します。これはRhinoの!RegExpオブジェクトはconstructorプロパティにObjectが設定されており、constructorプロパティから型判別できないためです。[[BR]] 型判別にinstanceof演算子ではなく既存オブジェクトを汚染する方法を選んだ理由には、ブラウザのconstructorプロパティには!RegExpが設定されていることと、instanceof演算子をサポートしていない環境での動作があります。