JavaScriptの変なところ(withキーワード)
JavaScriptが言語として見直されてきて、確固たる地位を築きつつあると思いますが、この言語がブラウザやプラットフォーム依存である以上、様々な障害があります。
そのひとつがとっても便利なwithキーワードです。
そのひとつがとっても便利なwithキーワードです。
withキーワード(with文)はを使う目的は、「同一親オブジェクトの省略」です。なんのこっちゃって感じですよね。つまりFORMタグで何個かの入力部品(INPUTタグ)を作ったとします。とするとHTMLとJavaScript以下のような例になります。
「(window.)document.FORMタグのNAME属性.INPUTタグのNAME属性.value」という風にデータにアクセスします。INPUTタグ、いわゆるフォーム部品が増えればこれはとても面倒なものです。
ということでwithキーワードを使って書き換えると次のようになります(JavaScriptの部分のみ)。
これだとコードがだいぶすっきりしましたね。withの使い方は「with(オブジェクト)」です。JavaScriptではHTML中のタグをオブジェクトと見なし、それぞれキーワード(予約語)を使って配列のようにアクセスすることができます。重要なのはタグはオブジェクトです。
この方法だと、確かにwithキーワードは便利なように見えますし、実際便利だと思います。コードの見易さなどからいうと。
しかし、このwithキーワードはInternet Explorer上では正しく機能しないことがあるようです。これは前述の通りブラウザ/プラットフォーム依存のためで、IEサポートしているJavaScriptの仕様では、一部の構文でwithキーワードが機能しないとされているからです。
だから、依存関係を解消したコーディングをするなら、いくらフォーム部品の数が多くても、withキーワードは使わないのが懸命です。
<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キーワードは使わないのが懸命です。
コメント