2013年3月4日、ブログは以下のURLに移行しました。最新の記事はこちらで公開しています。
新しいブログでは、コメントやリンクが一部切れていたり、一部機能が調整中です。
新しいブログへ

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

投稿日:2007.11.13 / カテゴリ:JavaScript / 投稿者: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キーワードは使わないのが懸命です。

コメント

まだコメントはありません。
このアイテムは閲覧専用です。コメントの投稿、投票はできません。