• ベストアンサー

JavaScriptのreturnについて

<script language="JavaScript"> <!-- function SymError() { return true; } window.onerror = SymError; var SymRealWinOpen = window.open; function SymWinOpen(url, name, attributes) { return (new Object()); } window.open = SymWinOpen; //--> </script> このスクリプトのSymErrorという関数で return trueと書いてありますがこれはなんでしょうか? 返り値だったら()がつくはずですしそもそもこの関数には引数がないです。 それとwindow.openには()がつかないのでしょうか?(windows.open()のように) 次のSymWinopenという関数の返り値にnew Object()がありますがこれもなんでしょうか? 新しいオブジェクトというのはわかるのですが実際何をしてるのかわからなくて。 最後にwindow.open = SymWinOpenこれはSymWinOpenという名のウィンドウを 開くということでしょうか?でもopenメソッドは○=window.open()という形を 取るはずなのに逆なのが疑問です。 たくさん質問をして恐縮ですがわかるのだけでいいですのでご教授していただけたらうれしいです。 ちなみにここのHPのソースです。 http://www.oscarcreation.com/japanese/

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

onerrorとか onclickとか そういう状況に応じて生じるものをイベントといいます。 また、その時呼び出されるプログラムをイベントハンドラとかいいます。 window.onerror=SysError; は、windowで生じたonerrorイベント時SysError関数を呼び出すことを登録していると思ってください。 それで、onerrorイベントが生じた時にSysError関数が呼び出されるわけですが、こうしたイベントハンドラ(イベント処理プログラム)での決まり事として、 return false; すると、このイベント自体が起こらなかったこと(無効)に また、 return true; とすると、正常にこのイベントが処理できたということ(有効)にする ということになっています。 また、 >返り値だったら()がつくはず は、勘違いです。 return (ret); などと書かれることも多いですが、 もともとreturn文にはカッコを必要としません。 なので、 return true; return (true); は同じです。 window.open = SymWinOpen; では、本来 window.openに新しくウインドウをオープンする関数が割り当てられていますが、 それを、自前の物(関数)に置き換えています。 つまりwindow.open(…);を使うと(この設定以降)SymWinOpen(…)が呼び出されることになりまs。 置き換えてしまうともともとの関数が呼び出せなくなるので var SymRealWinOpen = window.open; のようにして元々の関数を取っておいてあります なので、 SymRealWinOpen(…); は、もともとのwindow.openと同じものとして使うことができます。 >SymWinopenという関数の返り値にnew Object()がありますがこれもなんでしょうか? これは、新しいオブジェクトを作りそれを返すということで、この返値を使ってもそのままでは何も使えません。 なので、window.open(…)をしたときの動作を無効にするというような意味あいだと思います。

shoshosho
質問者

お礼

ご回答ありがとうございます return についてよくわかりました またwindow.open = SymWinOpen;について関数を置き換えることが できるというのは目からうろこです。 そんなこと(メソッドの内容を置き換えることができる)ができるんですね 勉強になります。 それと最後のnew Object()についてですがなんとなく意味はわかりますが なぜオブジェクトなのかが疑問です。null値の変数じゃなだめなのでしょうか? 私自身あまりオブジェクトについて理解がないもので・・・。 でもこのスクリプトが何をしているのがわかりました。 イベントハンドラの場合はreturn falseをつかってメソッドのときは 空のオブジェクトを入れて無効にするんですね。 詳しい解説ありがとうございました^^

その他の回答 (2)

  • 665
  • ベストアンサー率72% (18/25)
回答No.3

>なぜオブジェクトなのかが疑問です。null値の変数じゃなだめなのでしょうか? どちらでもいいように思われます。 ポップアップブロッカーの場合はwindow.open()の返り値がnullのものが多いようですので。

shoshosho
質問者

お礼

再度の回答ありがとうございました おかげさまでよくわかりました^^

  • 665
  • ベストアンサー率72% (18/25)
回答No.2

ちなみにそのスクリプトはノートン先生の仕業です。 実際にそのページのソースに記述されているわけではなく、 そのページを読み込んだ際にポップアップを防ぐ目的で勝手に挿入されるものです。 window.onerror = SymError;はウィンドウが開いていることを前提としたスクリプトを実行した際のエラーを防ぐ目的、 またreturn (new Object());は、window.open()の返り値がオブジェクトである事に対する配慮だろうと思います。

shoshosho
質問者

お礼

ご回答ありがとうございます なるほどノートン先生の仕業だったんですね。 ポップアップを防ぐ目的で自動的に入ってたとはおどろきです。 ソースに直接影響してるとは思いもしませんでした。 >return (new Object());は、window.open()の返り値がオブジェクトである事>に対する配慮だろうと思います。 ウィンドウ名、URLなどはオブジェクトなんですか。よく考えてみれば 変数とは微妙に違いますね #最後に道理でどこのHPのソース見てもこれがあるわけだ(^^;

関連するQ&A

専門家に質問してみよう