質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1648閲覧

jqueryのソースでわからない所があります。教えてください

foo45

総合スコア106

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2015/08/27 11:22

javascript

1(function($) { 2 3 $.fn.menumaker = function(options) { 4 5 var cssmenu = $(this), settings = $.extend({ 6 title: "Menu", 7 format: "dropdown", 8 sticky: false 9 }, options); 10 11 return this.each(function() { 12 cssmenu.prepend('<div id="menu-button">' + settings.title + '</div>'); 13 $(this).find("#menu-button").on('click', function(){ 14 $(this).toggleClass('menu-opened'); 15 var mainmenu = $(this).next('ul'); 16 if (mainmenu.hasClass('open')) { 17 mainmenu.hide().removeClass('open'); 18 } 19 else { 20 mainmenu.show().addClass('open'); 21 if (settings.format === "dropdown") { 22 mainmenu.find('ul').show(); 23 } 24 } 25 });

このソースのreturn this.eachのthisは何を指しているのですか?
またこの書き方はクロージャ??というものでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

このソースのreturn this.eachのthisは何を指しているのですか?

ちょっと遠回りしますが、前提のお話から。

$.fn.menumaker = function(options) ~
という書き方は、jQueryオブジェクトにmenumakerというメソッドを追加しますよという宣言です。

ですので、この宣言をした場合、

javascript

1$("#element").menumaker();

のような記述ができるようになります。
(引数にオプションをとっていますが、省略も可のようです)

となるとなんとなくわかるかもしれないですが、
thisはこのメソッドを呼んだ要素自体。つまり、$("#element")というjQueryオブジェクトになります。

this.eachで複数要素に対して処理を行っているのは、
id指定では1つの要素しか取得できませんが、class指定などでは複数の要素が取得できるため、
そのすべての処理をする必要があるからです。

またこの書き方はクロージャ??というものでしょうか?

cssmenuとsettingsという変数をthis.eachで適用する関数がレキシカルに参照していることからクロージャの条件に当てはまっていますね。
クロージャの定義については初めは理解するのがなかなかに難しいので、ご自身でいろいろと検索してみるとよいかと思います。

投稿2015/08/27 13:00

nyago_d

総合スコア178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

foo45

2015/08/27 13:57

わかりやすく教えていただきありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問