DMonkey の new URL()
で確保されるオブジェクトの挙動について。
url への書き込み
→ protocol username password hostname port path dir filename query に反映されます。
url からの読み込み
→ その時点の protocol username password hostname port path の値から URL が計算されて返されます。dir、filename、query の値は無視されます。
host への書き込み
→ hostname と、ポート番号があれば port に反映されます。
host からの読み込み
→ hostname と port の値から計算されて返されます。
protocol username password hostname port path directory filename query への書き込み
→ そのプロパティのみに反映されます。
上記プロパティからの読み込み
→ そのプロパティの値が返されます。
.toString()
→ 初期化時の URL または url プロパティへ書き込んだ URL が返されます。
上記に該当しない変化は起きません。
例えば、path を書き換えた後に filename を読み込んでも古い値のままです。
url の値を url へ書き込めば各プロパティにも反映されます。
var u = new URL ('http://example.com/aaa');
alert (u.filename); // aaa
u.path = '/zzz';
alert (u.filename); // aaa
u.url = u.url;
alert (u.filename); // zzz
こういったプロパティごとの挙動の違いや、フラグメント識別子(#~)に対応していないところが使いづらく、ラッパーオブジェクトかあるいは完全に自前で処理するオブジェクトを作りたくなります。
ただ DMonkey では「プロパティを読み書きするとメソッドが呼ばれる」形での getter/setter が定義出来ないので、使いづらいのは解決できそうにないかなー。