- ベストアンサー
画像点滅でのソースの意味を教えて下さい。
- jQueryを用いて画像を明滅させたいと思い、以下のようなソースにしました。
- 実際、コピペですので期待通りの動作はしています。
- しかし、内容に関していくつか理解できない部分があるので教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
それで正解よ
その他の回答 (2)
- askaaska
- ベストアンサー率35% (1455/4149)
bはBool型じゃないわ バリアント型よ bの存在意義に対してはこの関数が何をしているかを理解しないとダメね $(".demo").fadeTo('slow',(thisFunc.b = !!!thisFunc.b) ? 0.3 : 1,thisFunc); を別の書き方をすると var opacity; thisFunc.b = !!!thisFunc.b if (thisFunc.b) { opacity = 0.3; } else { opacity = 1; } $(".demo").fadeTo'slow',(opacity ,thisFunc); こうなるの thisFuncが実行されるたびにb値はtrue/falseが入れ替わるので 透明度が変わることで点滅しているように見えるのよね このbをグローバル変数にしても同じように動くことはできるけど bなんて変数名はもしかしたら他でも使っているかもしれないわ じゃあ絶対かぶりそうにない名前にすればいいけど それだったらその関数の中でしか使えない名前にしてしまえばいいわよね JavaScriptの変数はオブジェクトという単位で管理されるの そしてオブジェクトは属性(プロパティ)とイベント(関数)を持つことができるわ 例えばElementというオブジェクトはtagNameやtypeという属性があって onclickなどのイベントを持っているわけ これを利用して<input>タグなんかをJavaScriptで操作できるようにしている これがJavaScriptの仕組みなのよ そしてこの属性やイベントは好きなように追加できるの 今回のケースだと $(function() { var thisFunc = arguments.callee; //自身への参照を取得 //コールバックに自身を渡して再帰的に処理する $(".demo").fadeTo( 'slow', (thisFunc.b = !!!thisFunc.b) ? 0.3 : 1, thisFunc); }); という関数オブジェクトに属性bを追加したのよ そうすることでこの関数の属性bにtrue/falseを入れて管理したの なんというかこれだけで理解できるとは思っていないんだけど そういう感じなのよ これが理解できるとjquery.jsの中身を読んで理解できるようになるし それこそjquery.jsを作る事だってできるようになるわ
補足
分かりました! コピペ元の方が作った判定用の属性なんですね。 で、一番初め(undefinedの時)に二重論理否定の否定でtrueにして代入。 次の処理では同じように否定になるのでfalseになり代入。 三項演算子を使っているので0.3or1がopacityに設定される。 再帰処理になっているので点滅しているように見える。 こう理解しました。 最後にこの理解で合っているかだけでもお教え下さい。
- askaaska
- ベストアンサー率35% (1455/4149)
(1) ここでいうthisFuncは $(function() { var thisFunc = arguments.callee; //自身への参照を取得 //コールバックに自身を渡して再帰的に処理する $(".demo").fadeTo( 'slow', (thisFunc.b = !!!thisFunc.b) ? 0.3 : 1, thisFunc); });自身 ということはbはこの関数の中のローカルな変数よ (2) !!! は ! を3回やっているだけ 詳しく書くのは大変なので 「二重論理否定」 という言葉で調べてみてね (3) 「Javascript 点滅」で調べればいくらでも出てくるのでそれで
お礼
ご回答ありがとうございます。 (2)に関して「二重論理否定」というキーワードありがとうございました。 古いブラウザ用に[undefined]でもfalseを返せるようにと理解しました。 (3)に関しては、、、その通りですね。。 ソース自体に否定的な事仰られていませんので、これでよしとさせて頂きます。
補足
申し訳ありません。(1)に関してもう少し教えて下さい。 bがローカル変数だという事は分かり、Bool型であるという事もわかりました。 しかし、b自体の意図が汲めていません。 bは今回のような再帰処理で用いるための変数なんでしょうか? それとも別の用途なのでしょうか? 自身で検索すべきだとは思っていますが、キーワードが[b]では検索しようにも出来ないのでお力貸して頂きたいと思います。
お礼
長々とお付き合いありがとうございました。 正解を頂き安心しました。 普段C#での開発を行っていた為、突然出てきた[b]というものが作られたものとは認識できずにあたふたしてしまいました。 また二重論理否定という貴重なキーワードを教えて頂きありがとうございました。