• ベストアンサー

JavaScriptとjQueryのbindの違い

JavaScriptとjQueryのbindの違いについて教えてください。 ・書き方が違うだけで同じことを出来るのでしょうか ・bindが記述されているとき、それがJavaScriptなのかjQueryなのかどうやって判断するのでしょうか? 引数? あるいは文脈?

  • re97
  • お礼率80% (601/744)

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

  • ベストアンサー
  • byDesign
  • ベストアンサー率75% (45/60)
回答No.4

>・書き方が違うだけで同じことを出来るのでしょうか javascriptのbindの事がFunction.bindの事を指しているのであれば jQueryのbindとは機能が違います。 Function.bindに相当するのはjQuery.proxyになります。 逆に、jQuery.bindに相当するのはEventTarget.addEventListenerになります。 >・bindが記述されているとき、それがJavaScriptなのかjQueryなのかどうやって判断するのでしょうか? 関数を呼ぶときにxxx.bind(...)と書くと思いますが。 xxx部分のオブジェクトが何かで判断します。 jQueryオブジェクトであればjQuery.bind functionであればfunction.bindとなります。 var $button = $('#id'); $button.bind('click', function(){ console.log('click'); }); ^^^^^ ここがjQueryオブジェクトなので、jQuery.bind var click = function(){ console.log('click'; )}; click.bind(this); ^^^^^ ここがFunctionなので、Function.bind --------------------------------------------------- ではなぜ,Funcion.bindやEventTarget.addEventListenerがあるのに、jQueryはそれに相当するjQuery.proxyやjQuery.bindを作るのか? それは、Funcion.bindやEventTarget.addEventListenerはすべてのブラウザーで動かないのが原因です。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind 上のURLはFunction.bindの説明ですが『Polyfill』にこのような記載があります >bind 関数は ECMA-262 第5版に最近追加されたので、すべてのブラウザに存在するわけではありません。 https://developer.mozilla.org/ja/docs/Web/API/EventTarget.addEventListener addEventListenerの説明も『古い Internet Explorer と attachEvent』の部分でこのような記載があります >IE9 より前の Internet Explorer では、標準の addEventListener ではなく、 attachEvent を使わなければなりません。 このようにブラウザー毎に、関数がなかったり、名前が違ったりします。 この挙動の違いをjQueryが吸収するように作れられていて。 jQuey.proxyでは、Function.bindが無くても問題ないように jQuey.bindは、addEventListenerとattachEventどちらを呼ぶか振り分けたりするよになっています。 ---------------------------------- 予断ですが、jQuery.bindは古い書き方で、今はjQuey.onに置き換わっています、 http://tacamy.hatenablog.com/entry/2013/03/03/213113

re97
質問者

お礼

回答ありがとうございました。 >Function.bindに相当するのはjQuery.proxyになります。 >逆に、jQuery.bindに相当するのはEventTarget.addEventListenerになります ・ここら辺り混乱していたので、大変参考になりました >なぜ,Funcion.bindやEventTarget.addEventListenerがあるのに、jQueryはそれに相当するjQuery.proxyやjQuery.bindを作るのか? ・突っ込んだ解説をいただき、ありがとうございます ・なぜだろう? と思っていたので、大変勉強になりました >予断ですが、jQuery.bindは古い書き方で、今はjQuey.onに置き換わっています ・アドバイスありがとうございます ・バージョンアップに伴い、jQueryの書き方って、結構変わるんですね ・大変参考になりましたー

その他の回答 (3)

  • think49
  • ベストアンサー率59% (285/482)
回答No.3

jQuery.prototype.bind と Function.prototype.bind は用途も所属オブジェクトも異なります。 jQuery.prototype.bind http://api.jquery.com/bind/ Function.prototype.bind https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind jQuery.prototype.bind の場合、 bind プロパティの所属オブジェクトが jQuery オブジェクトになりますので、所属オブジェクトを確認するだけで判断可能です。 Function.prototype.bind は関数のプロパティですので、所属オブジェクトが関数なら該当します。 # Re: re97さん

re97
質問者

お礼

回答ありがとうございました。 ・用途も所属オブジェクトも異なるのに同名ってあり得るんですね ・大変参考になりましたー

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.2

対象がjQueryオブジェクトなのか普通の関数なのか、文脈や引数で判断するのは容易でしょう。 因みに用途は全く異なります。

re97
質問者

お礼

回答ありがとうございましたー

  • tracer
  • ベストアンサー率41% (255/621)
回答No.1

JavaScriptで書かれたあるひとつの関数群を「jQuery」と呼んでいるに過ぎず、JavaScriptとjQueryに差はありません。jQueryという関数群を通してJavaScriptを実行していると考えてもよいでしょう。つまり、jQueryを使おうが使わまいが、最終的には必ずJavaScriptが実行されているのです。従って、通常は、「JavaScriptなのかjQueryなのか判断する」必要がありません。

re97
質問者

お礼

回答ありがとうございましたー

関連するQ&A

  • javascriptとjQueryについて

    javascriptの基礎部分を学びその後、jQueryを学習しました。 ある程度jQueryはできるようになりました。 しかしjQueryはjavascriptのライブラリでjavascriptを簡単に書けるということなのでjavascriptも深いところまで学習すべきか迷っています。 jQueryを学習したのならjavascriptは深いところまでしなくてもいいのでしょうか? やはり使用用途で学習するべきとか変わってくるものなのでしょうか? もし変わってくる場合、こういうことがしたいならjQueryではできないからjavascriptも学習すべきなど簡単な例など出せれたらよろしくお願いします。 現在はPHPとmySQLを学習しています。 質問文が下手で伝わりにくいかもしれないですがよろしくお願いします。

  • Jqueryのjavascriptが読み込まれません

    はじめまして。 Jqueryのsuperfishを使用したサイトを作っているのですが、javascriptファイルが読み込まれていないような状態になっています。 具体的には 1)ローカル環境では問題なく読み込まれている 2)サーバにアップすると、同階層の別ページ(A.htmlとします)では機能しているのに、特定のページ(B.html)では読み込まれていない ※A.htmlとB.htmlで同じ効果(superfishによるアコーディオンナビ実装)を得たい 3)A.htmlの<head>内javascriptに関する記述とB.html内同箇所の記述は全く同じ 4)B.html内の他の単独のjavascriptは問題なく読み込まれる という状況です。 この場合どのような原因が考えられるのでしょうか。 javascriptについては全くの初心者であり、どうにも解決できず、困っています。 ちなみに使用しているjqueryはjquery-1.2.6.min.jsです。 (大元であるA.htmlは違う方にコーディングしてもらい、そのデータを元にB.htmlをコーディングする作業をしています) jquery-1.2.6.min.jsもしくはsuperfish.js内に動かすhtmlへのパスが記載されているのかとも思いましたが、知識不足で該当の箇所が見つけられず…。 ご意見を頂ければ幸いです。 どうぞよろしくお願い致します。

  • jqueryはJavaScript?

    jqueryとJavaScriptの関係がよくわからないのですが JavaScriptというカテゴリーの中にjqueryが入ってるのですか?

  • javascriptとjQueryについて

    初心者の質問で申し訳ないのですが回答してもらえるとうれしいです。 つい先日、書店に行ったとき新刊でjavascriptの入門書みたいな本がでておりふと疑問に思ったことがあります。 javascriptのライブラリの一つでjQueryという誰でも簡単にjavascriptと同じ動作ができるものがあるのになぜjavascriptを学んでもらうための本が今更出ているのだろうと思いまいした。 たしかにjQueryももとをたどればjavascriptといえると思うのですがそれなら初めからjQuery入門書をだしたほうがいいのではないかと思います。 私自身まだまだ無知なので本当はこういうことというのがありましたら教えてください。

  • jquery自体をJavaScriptで読み込む

    以下のようなものを想定して、jquery.js という中身がjqueryでないものから jqueryの実態を読み込みをさせようとしているのですが、うまくいきません。 ・jquery 2以降は、IE8以前をサポートしなくなるので、useragentで  読み込むjqueryを選択したい。 ・現在、CGIスクリプト上で、jqueryの読み込みを判断しているが、できれば  外部JavaScriptで巨大なjqueryの読み込みの判断をさせたい。 ・キャッシュされたとしても、ライブラリであることから、圧縮して70kバイトと  あまりにも巨大である ・(googleapiを利用すると、IE8以前では、プライバシーの警告が出る場合がある) 確かに、スマホにjqueryを普通に読み込ませても、何も問題なく動作しますが、 相当がんばって圧縮をしても70kバイト程度のライブラリを、使用しないのに 読み込むというのも気が引ける部分もあります。 何とか、動的に、かつ、何も問題なく、jqueryをJavaScriptで読み込む方法は あるでしょうか? このようなコードは、document.bodyがnullであるため、はじかれてしまいます。 var script = document.createElement('script'); script.src = 'http://hoge/jquery-1.js'; document.body.appendChild(script); var callee = arguments.callee; var interval = setInterval(function() { if (!document.evaluate) return; clearInterval(interval); interval = null; callee(); }, 100); このコードでも、jqueryを使用するものが、jQueryがないというエラーで、うまくいきません var scrptE = document.createElement("script"); scrptE.setAttribute("type", "text/javascript"); scrptE.setAttribute("language", "JavaScript"); scrptE.setAttribute("src", "http://hoge/jquery-1.js"); document.getElementsByTagName("head")[0].appendChild(scrptE); 以下のようなのは、googleapiのため、使わないものと考えます。 http://phpjavascriptroom.com/?t=ajax&p=jquery よろしくお願いします。

  • jQuery bind時のeventについて

    お世話になっております。 当方JavaScriptは不慣れなため、的外れな質問になってしまうかもしれませんが、その際はご指摘を頂けるとありがたいです。 スマートフォン向けのWebページを作成するにあたり、jQueryを用いてタッチイベントを取得しようと考えています。 以下に簡略化したソースを掲載致します。 /*--------------------------------------------*/ <script type="text/javascript"> $(function(){ $('#id').bind('touchstart',function(e) { alert(event); }); }); </script> /*--------------------------------------------*/ この際、Android版Opera上で表示されたのは、「object TouchEvent」でした。 その後主要なブラウザで動作確認をしていたところ、Android版FireFoxでは動作しないことが判明しました。 調べたところ、Gecko系のブラウザではwindow.eventという属性は存在せず、引数であるeに格納されているとのことだったので、alert(e);として確認したところ、表示されたのは「object Object」でした。 本来であればevent.changedTouches[0].pageX等の値を取得したいのですが、引数のeが目的とするオブジェクトではないようなので、値を取得できません。 1. そもそもこのeventは、window.eventという認識で良いのでしょうか? 2. FireFoxでwindow.eventに該当するオブジェクトを取得するにはどういった手順が必要なのでしょうか? 以上2点、ご教授頂けると幸いです。

  • javascript・Jqueryなにをどこまで?

    本を使ってjavascriptの勉強を始めました。 使用している本→(よくわかるJavaScriptの教科書) ●勉強の動機 javascript勉強の動機ですが、現在スマフォサイトのマークア ップをメインに仕事をしており、今後もさらにjavascriptでの技術が使用されると思い始めました! ●疑問 javascriptを簡単に使用できるJQueryの使い方も書いてあり、 jQueryだけを覚えるだけで、難しいjavascriptを覚える必要があるのか疑問に思ってます。 他のサイトでjavascriptを覚えないとJQeryサンプルの編集ができないため、覚える必要があると 書いてありましたが、そのようにサンプルを編集する機会は実際どの多いのでしょうか。 また、話が変わりますが、フロントエンジニアに皆さん求めるレベルなどがありましたら、教えてほしいです。 ●今私ができる事 HTML5 CSS PHPの基礎は理解しています。 JQeryを使った、画像の切り替えやslideDown等を使った簡単な動きを書くこと。 長文になりましたら、どうぞよろしくお願いします。

  • BINDのバージョンによって設定違いについて

    以下の設定をBIND9.3.0とBIND8.2.4に設定しました。 BIND9.3.0には、zone "." の設定は必要ないのですが BIND8.2.4には、zone "." の記述がないと正常に動作しません。 (BIND8.1.2では、記述がなくても動作したような記憶がありますが・・) BINDによって記述が必要でしょうか? また、BINDのバージョンによっての記述の違いがわかるホームページ等 ございましたら教えて下さい。 options { directory /var/named; pid-file "/var/run/named/named.pid"; auth-nxdomain yes; version allow-transfer { any; }; allow-query { any; }; allow-recursion { any; }; forward only; forwarders { 192.168.***.***; }; // query-source port 53; }; zone "." in { type hint; file "named.root"; };  ・  ・  ・  ・  ・

  • jquery bindがとまらない

    jquery の bindを使い、以下のサイトを参考にしながら、実装を試みているのですが、unbindしてもとまらなくなってしまいました。 mousedown、mousemove、mouseup を使い、mousedownした時点のx座標と、mousemoveしている間のx座標の差を取り、mouseup時に移動距離を表示するというものをとりあえず作りたいのですが、mousemoveが永遠続いてしまい、mouseupしてもとまりません。 $('#main_body').mousedown(function(e){ now_x = e.pageX; alert(now_x); $(document).mousemove(function(e){ now_x2 = e.pageX; alert(now_x2); }) }).mouseup(function(){ alert("bbbb"); $(document).unbind("mousemove"); }); これですと、now_x2がずっと出続けてしまいます。。。 どうか、お力をお貸しください。 よろしくお願い致します。 参考サイト: http://weble.org/2011/03/08/jquery-floatingbox

  • jQueryの.val()とinnerHTMLの違いはなんでしょうか?

    jQueryの.val()とinnerHTMLの違いはなんでしょうか? テキストエリアの値を修正しても、innerHTMLでは取得できず、 jQueryの.va()lだと取得できました。 なにが違うのでしょうか? jQueryのメソッドと、javascriptネイティブのinnerHTMLプロパティを比べるのはおかしいかもしれませんが、 元々のjavascriptにはjQueryの.val()に相当するものはありますでしょうか? よろしくお願いいたします。

専門家に質問してみよう