JavaScriptの変なところ(withキーワード)

カテゴリ: JavaScript / 公開日: 2007年11月13日(火曜)10:43 / 投稿者: Tom Goodsun
JavaScriptが言語として見直されてきて、確固たる地位を築きつつあると思いますが、この言語がブラウザやプラットフォーム依存である以上、様々な障害があります。
そのひとつがとっても便利なwithキーワードです。 withキーワード(with文)はを使う目的は、「同一親オブジェクトの省略」です。なんのこっちゃって感じですよね。つまりFORMタグで何個かの入力部品(INPUTタグ)を作ったとします。とするとHTMLとJavaScript以下のような例になります。
<script type="text/javascript">
function func00(){
t1 = document.form1.text1.value;
t2 = document.form1.text2.value;
document.write(t1 + t2);
}
</script>

<form name="form1">
<input type="text" name="text1" value="" /></ br>
<input type="text" name="text2" value="" /></ br>
<input type="button" value="OK" onclick="func00()" /></ br>
</form>

「(window.)document.FORMタグのNAME属性.INPUTタグのNAME属性.value」という風にデータにアクセスします。INPUTタグ、いわゆるフォーム部品が増えればこれはとても面倒なものです。
ということでwithキーワードを使って書き換えると次のようになります(JavaScriptの部分のみ)。
<script type="text/javascript">
function func00(){
with(document.form1){
t1 = text1.value;
t2 = text2.value;
document.write(t1 + t2);
}
}
</script>

これだとコードがだいぶすっきりしましたね。withの使い方は「with(オブジェクト)」です。JavaScriptではHTML中のタグをオブジェクトと見なし、それぞれキーワード(予約語)を使って配列のようにアクセスすることができます。重要なのはタグはオブジェクトです。

この方法だと、確かにwithキーワードは便利なように見えますし、実際便利だと思います。コードの見易さなどからいうと。


しかし、このwithキーワードはInternet Explorer上では正しく機能しないことがあるようです。これは前述の通りブラウザ/プラットフォーム依存のためで、IEサポートしているJavaScriptの仕様では、一部の構文でwithキーワードが機能しないとされているからです。

だから、依存関係を解消したコーディングをするなら、いくらフォーム部品の数が多くても、withキーワードは使わないのが懸命です。