JavaScript情報交換所(プログラミング既習者専用)
- 1 :デフォルトの名無しさん:2015/12/07(月) 07:26:33.87 ID:NYLGCW0V.net
- 実際にJavaScriptを書いている人の情報交換所です。
プログラミング既習者専用です。初心者の方はご遠慮下さい。
玄人の方、歓迎致します。
- 546 :デフォルトの名無しさん:2020/05/04(月) 22:21:44 ID:D5tu2Ze6.net
- >>545
そのまんまだろ
基本→基底でもいいが
C#のObjectと同じ立ち位置ということ
それで分からないのなら、無視でいい
アップキャストとか考える必要のある言語でもないし、どうせ使わない
他の静的型あり言語同様、全ての型は別物、と考えていても特段問題はない
プログラミング言語なんて「知識」よりも「技能」に近いから、分からないなら分からないなりに進めばいいだけ
元の書き方でも十分分かりやすい
それで分からないのは君がオブジェクト指向を理解出来てないからだが、
どのみち無視でいい
- 547 :デフォルトの名無しさん:2020/05/04(月) 22:38:13 ID:Zdi/ARyL.net
- いやJavaはひととおりマスターしたから
オブジェクト指向はバッチリ理解している。
JavaScriptは気持ち悪いことが多すぎる。関数が変数に代入できることとか。
まるで物理で光が粒でもあるし波でもあるという二重性のことを習ったときのように頭が混乱する。
このへんの考え方について詳しくコツを教えていただけませんか?
- 548 :デフォルトの名無しさん:2020/05/04(月) 22:39:31 ID:Zdi/ARyL.net
- Javaは体系的にスッキリしてるから実に分かりやすい。
この気持ち悪いJavaScriptは何なの?
- 549 :デフォルトの名無しさん:2020/05/04(月) 22:52:19 ID:eA9rrZ8d.net
- オブジェクト指向の理解とは関係ないJavaScript固有の話だと思うがな。
前半部分は"Object"という名前のオブジェクトがグローバルに存在するということに
想像が及ばないと理解しづらいだろうし、後半は「基本オブジェクト」というwell-definedでない
言葉で説明しているが、これもオブジェクトが他のオブジェクトのプロパティを継承する
prototype継承を知らなければこの文章だけからは理解しにくいだろう。
- 550 :デフォルトの名無しさん:2020/05/05(火) 00:28:49 ID:esp/1iza.net
- >>547
> 関数が変数に代入できることとか。
Javaも出来るようになっただろ
というかメジャー言語で出来なかったのはJavaだけで、それ以外の言語は全部出来てる
Cでもだ
コツ?そりゃお前が何も知らない馬鹿だとちゃんと自覚することだよ
他言語少しでもかじってれば、そんなところで引っかかることはない
(ただしJavaの連中はこのタイプ=他言語なんて全く知らない馬鹿も多いとは聞くが)
>>549
そうか?こいつは分かったつもりの馬鹿だと思うぞ
確認したが、JavaもObjectクラスあるし、使い方としてはJavaのObjectとも同じ立ち位置だ
> クラス ArrayList<E>
> java.lang.Object
> java.util.AbstractCollection<E>
> java.util.AbstractList<E>
> java.util.ArrayList<E>
> https://docs.oracle.com/javase/jp/7/api/java/util/ArrayList.html
これを
> 「Objectオブジェクトは、すべてのオブジェクトの基本オブジェクトである」
と表現されて理解出来てないのだから、Javaもオブジェクト指向も分かってない馬鹿だよ
この部分はまだプロトタイプベースがどうとか以前の問題だ
まあ正直俺はプロトタイプベースに大して戸惑わなかったし、
今でもプロトタイプベースの方がクラスベースより表現範囲が広いので良いと思ってる
そしてこいつはいわゆる「クラス脳」で永遠とプロトタイプベースを理解出来ないのだろう
といっても実際にプロトタイプベースでないと組めないような事をするのは希だし、
クラス脳の為にクラス構文も入ったので、別段問題でもないけど
- 551 :デフォルトの名無しさん:2020/05/05(火) 02:37:44 ID:rwJ86+M0.net
- class Abc
end
多くの言語では、このように継承元を書かずに、クラスを定義した場合は、
Object クラスから直接継承したとみなされる
普通は、継承チェーンを遡ると、Object クラスに突き当たる。
すべてのクラスの祖先
この板のJavaScript のスレは、荒らし対策で緊急避難用に作られたもの。
web 制作管理板のスレへ書き込んだ方がよい
こちらには、荒らししかいない
荒らしは必ず、2回書き込む。
自分のレスに、リンクを付けて「そうだよな」みたいに自演する
多くの人が言ってるように見せかける。
午前、3時とかでも、同時に2つのレスを書くw
- 552 :デフォルトの名無しさん:2020/05/05(火) 02:42:45 ID:rwJ86+M0.net
- ほとんどの言語で、関数も変数に代入できる。
別名みたいなもの。Functor
変数 = f
変数 = f( )
上は、関数の代入で、
下は、関数の呼び出し
( ) が、関数呼び出し演算子
- 553 :デフォルトの名無しさん:2020/05/05(火) 10:37:45.75 ID:esp/1iza.net
- >>551
Web制作板確認したが、相変わらずだな
まあ俺はこのレベルの馬鹿を引き取ってくれることには大賛成だから、どうぞよろしく、でしかないが
- 554 :549:2020/05/05(火) 10:39:12.27 ID:esp/1iza.net
- >>549
お前もprototype継承を特別視過ぎ
> 前半部分は"Object"という名前のオブジェクトがグローバルに存在するということに想像が及ばないと理解しづらいだろうし、
Javaにも全く同じ立ち位置のObjectが存在してる
Javaを知らないか、知っててピンと来ない=単なる馬鹿か
> 後半は「基本オブジェクト」というwell-definedでない言葉で説明しているが
C#でも全く同じ表現だ
> Object クラス
> これは、全 .NET クラスの基本クラスであり、型階層のルートです。
> https://docs.microsoft.com/ja-jp/dotnet/api/system.object?view=netcore-3.1
prototypeベースだからクラスではなくオブジェクトとなっている
だからこの表現で正しいんだよ
> オブジェクト指向の理解とは関係ないJavaScript固有の話だと思うがな。
これもダウト
> 多くの言語では、このように継承元を書かずに、クラスを定義した場合は、Object クラスから直接継承したとみなされる (550)
ホントかよ、と思ったが、少なくともJavaとC#ではそうなるようだ(JavaScriptもだが)
これは本来は言語ではなくフレームワークの仕様であり、C++はそうなのだが、
少なくともJavaとC#は最初からオブジェクト指向大前提(のフレームワークを使う前提)でしか使えない仕様らしい
が、それはさておき、全ての型のルートを持ってボックス化出来るようになっており、それを利用する、というのは、
典型的なオブジェクト指向の使い方であって、JavaScript固有の話でも何でもない
というか、むしろ、JavaScript固有の話なんて何もない
prototypeも別にJavaScriptが発明したものでもない
初見だとそれなりに戸惑う、というだけ
ただしJavaScriptのオブジェクト指向なんてJava/C#のオブジェクト指向からすると全く使い物にならない物だし、
実際にボックス化やアップ/ダウンキャスト等を考える必要なんてほぼ無いだろ
お前自身もオブジェクト指向を正しく理解出来てないのだと思うぜ
- 555 :デフォルトの名無しさん:2020/05/05(火) 10:56:56 ID:ZXlt5r8n.net
- 「Objectオブジェクト」といきなり言われて、それがJavaのObjectクラスのようなものと
想像できなくても別に不思議はないかと。
- 556 :デフォルトの名無しさん:2020/05/05(火) 11:16:54.06 ID:esp/1iza.net
- >>555
ねえよ
俺はそれは単なる馬鹿だとしか認識しない
少なくともこの馬鹿はJavaもオブジェクト指向もマスターしてるつもりなんだぜ
自分が何も知らないことを自覚できず、
> (ワラ
とかやってるから馬鹿のままなんだよ
こいつは既に老害化してる
JavaですらJava8(2014)から関数ポインタを使えるようになってる
こいつはこのことすら知らない
といっても実際Java界隈なんてその程度だとは思うが
オブジェクト指向を利用してコードを共通化しようとすると、どうしても
C++のように型消去するか、
JavaやC#やJavaScriptのObjectのような型階層のルートが必要になってくる
これらの言語で全てそれが「Object」という名前で統一されているのは偶然ではない
オブジェクト指向(=ObjectOriented)のルートだからObjectなんだよ
今時のメジャー言語は全てオブジェクト指向出来るようになってるし、
逆に、「Object」とかいう物が出てきたら、これか!とピンと来ない方がおかしい
つっても重ねて言うが、Javaの連中なんてその程度なのも事実だが
- 557 :デフォルトの名無しさん:2020/05/05(火) 11:26:22.49 ID:GGtHBQ+v.net
- >>556
関数ポインタと参照は違うって知ってる?
- 558 :デフォルトの名無しさん:2020/05/05(火) 11:39:37 ID:esp/1iza.net
- >>557
勿論知ってるぞ
Javaのが「関数ポインタ」ではなく「関数参照」だというのならそうなのだろう
見て分かるとおり、俺はJavaは使ってないからその辺は正確ではない
ただぶっちゃけ、ポインタと参照はほぼ等価だし、
C++のようにそれらが別物だと明示的な言語以外では混同してても全く問題ないと思うが
実際、JavaScriptにおいて「参照」を「ポインタ」と言い換えても何ら問題ないだろ
どう見ても俺の揚げ足取りをしようとしているように見えるが、
それが価値あると思うなら頑張ってどうぞ
ただし俺は馬鹿と話す意味はないと見たらすぐ降りる
その場合はお前の勝ちでいい
んで、関数ポインタと参照の違いを知っているお前は、どんな素晴らしい知見を披露してくれるの?
是非よろしく
- 559 :デフォルトの名無しさん:2020/05/05(火) 11:48:55 ID:n32zrCmj.net
- > 実際、JavaScriptにおいて「参照」を「ポインタ」と言い換えても何ら問題ないだろ
だめ。ポインタは数値で置き換えられるアドレスであり
ポインタはアドレス加算などの演算ができるもの
アドレス加算ができない以上それは参照であってポインタではない
そしてJavaで参照はずっと前からできる
- 560 :デフォルトの名無しさん:2020/05/05(火) 12:10:13 ID:esp/1iza.net
- >>559
> そしてJavaで参照はずっと前からできる
Java8で新しく出来るようになったのは、『関数』参照な
話をずらすな
そして>>547が理解出来てないのはこれだ
> ポインタはアドレス加算などの演算ができるもの
> アドレス加算ができない以上それは参照であってポインタではない
それはC++での定義な
RustやGoも「ポインタ」を扱えるが、こちらは最初から加算なんて出来ないようになっている(確か)
少なくともRustやGoの定義する「ポインタ」はそう
というか、C++の参照自体が「ポインタは危険なのでコンパイラ側で対策して『参照』と命名しました」でしかないし、
JavaやC#で言う参照も全くこれと同じなのだが、当然実体は「ポインタ」でしかなく、
当然関数呼び出しの引数にはまんま「ポインタ」が積まれる
というかそこら辺理解出来てないのはやっぱりJavaしか知らない馬鹿だからだ
ポインタと参照が実体は同じだ、ということを理解出来ないのも
(論理的な意味が違うだけで、物理的な意味や値は同じ)
いずれにしてもJavaってのはかなり簡素化された言語で、
コンピューターの実体(物理構造)を知らなくてもいいように出来ている
これ自体はいいことなのだが、
その程度の知識なのに「ポインタと参照は違う(キリッ」とかやるのは間違ってる
自分の知識が全く足りてないことを認めて、きちんと学んだ方がいい
ポインタはCの鬼門だとされているが、現実として、ポインタを扱った方が動作効率が圧倒的によく、
結果的にJavaでもJavaScriptでも、或いは他言語でも、内部動作はポインタで作られているので、
どうしてこういう動きをするのか、どうしてこういう仕様なのか、を理解するのは、ポインタの理解が不可欠だ
ある程度以上のプログラマになる為には、ポインタの理解から逃げているようでは無理だ
これが逆にJavaプログラマが相変わらず糞な遠因でもある
- 561 :デフォルトの名無しさん:2020/05/07(木) 13:23:56.11 ID:fANici3H.net
- >>547
> いやJavaはひととおりマスターしたから
> オブジェクト指向はバッチリ理解している。
>548
> Javaは体系的にスッキリしてるから実に分かりやすい。
プログラミング言語をJavaしか使ったことないJavaおじさんか?
- 562 :デフォルトの名無しさん:2020/05/07(木) 22:35:41 ID:U9K3TqbR.net
- >>561
この話題を続ける意味もないと思うが
Javaおじさんですらないはず
多分Java若者馬鹿老害
Java8で関数ポインタが導入された為、
それ以前に完全にJava7をマスターしている「Javaおじさん」なら導入するかどうかの大議論をしているはず
少なくともJavaの一線で働いている奴が知識を6年間もupdateしてないとは考えづらい
使ったことが無くても、また、(コーディングルール上)職場で使えないとしても、全く知らないというのはない(と思いたい)
そしてオブジェクト指向への理解も皆無だ、これは「Javaおじさん」ならあり得ない
最近の若者はプログラミング言語の選択肢が多く、若干戸惑っているように思える
ぶっちゃけ最初の最初の言語なんてどれでも大差ないのだが、「僕が選んで学んだ言語すごい=僕すごい」をやる奴が多すぎる
こいつも何らかの理由でJavaを選択し、「Javaすごい」とポジショントークをしているだけ
おそらく年齢は20代、プログラミング言語はJavaしか知らず、Java7の本でJavaを勉強した人だ
ただこの時点でこの老害っぷりは酷い
一応言っておくが、年齢ではなく、自分の考え方が絶対に正しいと固執し始めると老害になる
546はもうちょっと真摯にプログラミングをした方がいい
ただしJavaがスッキリ、というか、簡単なのは事実だ
だから大受けした
そしてPythonの方がもっと簡単だから、もっと大受けしつつあるだけ
ただ現実問題として、JavaScriptのオブジェクト指向なんてどうせ使い物にならないから、無視でいい
しかしまた現実として、今現在のシェアはJavaScript>Javaなのだから、
どうしてそうなったのかが理解出来ないうちは「Javaすごい=僕すごい」みたいな幼稚な考え方は止めた方がいい
Java自体が凄かったのも事実だが、それも過去になりつつある
- 563 :デフォルトの名無しさん:2020/05/12(火) 13:08:44 ID:4J1vnKbM.net
- '(シングルクウォーテーション)と"(ダブルクウォーテーション)の使い分けに悩みます。
悩みを消しこれだと自信を持って使う考え方はありますか?
どっちを使ってもいい場合とどちらか限定の使い方があるので気持ち悪いですw
- 564 :デフォルトの名無しさん:2020/05/12(火) 13:33:40 ID:01D/nxpT.net
- >>563
シェルスクリプトだと、'と"とは、展開の有無等であきらかに異なるから、
それにしたがって使い分ける。
どちらも同じって場合は、文字列に空白が含まれる場合や入れ子になる場合に"を使って、
その他、基本的には'でくくってる。
jsやpythonなんかがこれに該当。
"しか使えないバッチファイルは文句なしに"。
ただし、*nix由来のプログラムの場合、オプション内部で'を入れ子で使うことがある。
こんな感じ?
- 565 :デフォルトの名無しさん:2020/05/13(水) 06:16:03.92 ID:VSt/R8YQ.net
- VSCode のデフォルトが、Beautify だろ。
拡張機能のPrettier とか
'・" かどうかは、これらの設定で変わる
HTML の属性が、" で囲むから、それらの文字列をさらに囲むには、' を使う
JavaScript の話は、web 制作管理板の方で聞いてください!
この板には、あまり人がいないから
- 566 :質問者:2020/05/13(水) 13:14:18.33 ID:5xfr/P29.net
- こちらで良いかわかりませんが、
・web上でモニタリングをしたい
・10秒ごとに自動更新
・固定htmlに要素を用意。javascriptで変数を持ち、値によって要素の画像を切り替える。
getElementById(*).src=****
setTimeout(this,10000)
これをサーバーに置いて10人くらいがアクセスしたら、サーバーの負荷はどうでしょうか?
画像切り替えるときにサーバーにアクセスするので、やはりだめでしょうか?
わかる方いましたらお願いいたします。
- 567 :デフォルトの名無しさん:2020/05/13(水) 13:59:35.07 ID:VSt/R8YQ.net
- 数枚程度なら、すべての画像を送ってしまって、
ブラウザ側で、スライダーなどで切り替える
Google map みたいに、無数の画像があるなら、
ajax でサーバー側にアクセスして、必要な画像を送ってもらう
JavaScript の話は、web 制作管理板の方で聞いてください!
この板には、あまり人がいないから
- 568 :デフォルトの名無しさん:2020/05/13(水) 14:02:19.06 ID:WBibu7Ic.net
- >>566
いろいろイミフ
>・web上でモニタリングをしたい
誰が何をどうやってモニタリングするの?
>・10秒ごとに自動更新
何を更新するの?
>これをサーバーに置いて10人くらいがアクセスしたら、サーバーの負荷はどうでしょうか?
クライアント側JavaScriptの話でサーバー負荷とどう関係があるの?
- 569 :デフォルトの名無しさん:2020/05/13(水) 14:12:08.64 ID:shZVwRy5.net
- >>564
そうざますかありがとう
どっちみち慣れないうちは混乱しますね
JSだけのエンジニアなら当然その人の哲学や宗教により迷わず判断してると思うけど
こっちはJSは片手間でやっててさわるのが数年ぶりということがあるから混乱しますわ
- 570 :デフォルトの名無しさん:2020/05/13(水) 14:14:46.69 ID:URUm4HTQ.net
- 何の要素か知らんが、
「cssで作るスライドショー」とかでググったら答えが落ちてそう
- 571 :デフォルトの名無しさん:2020/05/13(水) 14:21:07.89 ID:WBibu7Ic.net
- >>569
自分で決められないならとりあえずビッグネームのstyle guideに従っとけばいい
JavaScript =>single quote
HTML => double quote
CSS => single quote
https://google.github.io/styleguide/jsguide.html#features-strings-use-single-quotes
https://google.github.io/styleguide/htmlcssguide.html#HTML_Quotation_Marks
https://google.github.io/styleguide/htmlcssguide.html#CSS_Quotation_Marks
- 572 :質問者:2020/05/13(水) 15:12:19.72 ID:5xfr/P29.net
- >>567
ありがとうございます。
>>568
>>・web上でモニタリングをしたい
>誰が何をどうやってモニタリングするの?
やりたい事は、100個のセンサや機械の情報をブラウザ上にリアルタイムで表示して、異常ならば、ブラウザを見てる人に通知したいということです。
>・10秒ごとに自動更新
センサーや機械の情報です。
>>これをサーバーに置いて10人くらいがアクセスしたら、サーバーの負荷はどうでしょうか?
>クライアント側JavaScriptの話でサーバー負荷とどう関係があるの?
javascriptで動的にイメージ画像を切り替えたら、結局サーバーにアクセスすることになってしまうのではと思ったのです。
画像イメージはサーバー上に置かれているので。一回アクセスしたらキャッシュされるかもしれませんが。
>>570
ありがとうございます。
- 573 :デフォルトの名無しさん:2020/05/13(水) 15:52:15 ID:WBibu7Ic.net
- >>572
なるほど
サーバー側のセンサーや機械の状態更新を
クライアントからのアクセスによってトリガーする仕組みだと不味いけど
そうじゃなくてサーバー側ですでに存在してるデータに対して
10人くらいが数秒に1回アクセスするんなら
その負荷は微々たるものだよ
各状態に応じた画像は
最初にモニタリング用画面にアクセスした時に全部ダウンロードさせておいて
数秒に1回AJAXでサーバー側の状態のみ取得してその値によって画面表示を切り替えればいい
- 574 :質問者:2020/05/13(水) 16:03:47.03 ID:5xfr/P29.net
- >>573
そうです。
>最初にモニタリング用画面にアクセスした時に全部ダウンロードさせておいて
この技術がわかりません。何をキーワードにして調べれば良いのでしょうか、すみませんが、お願いいたします。
- 575 :質問者:2020/05/13(水) 16:51:28.10 ID:5xfr/P29.net
- すみません。解決しました。
最初にリロードしたときに正常な画像だけでなく、異常な画像もリンク(表示しない)しておけばよいのですね。
そうしておけばブラウザ側にキャッシュされるので。
- 576 :デフォルトの名無しさん:2020/05/13(水) 17:25:36.80 ID:WBibu7Ic.net
- >>575
いろいろ方法あるけど一番堅いのはCSSスプライト
https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Images/Implementing_image_sprites_in_CSS
他には
- visibility: hidden
- JavaScriptでページロード時に画像を読み込む
- 凡例として異常時の画像も一つ表示しておく
など
この辺の話はJSのプログラミングの話じゃないので
誰か書いてたけどweb制作板で聞いたほうがいいかも
- 577 :質問者:2020/05/13(水) 17:50:05 ID:5xfr/P29.net
- >>576
本当にいろいろとありがとうございました。
- 578 :564:2020/05/13(水) 18:01:05 ID:VSt/R8YQ.net
- >>569
>>565
にも書いたけど、
VSCode のデフォルトが、Beautify で、拡張機能のPrettier が有名
Ruby on Rails で有名な、Airbnb などのStyle Guide だろ
- 579 :デフォルトの名無しさん:2020/05/13(水) 18:09:08 ID:VSt/R8YQ.net
- >>572
>画像イメージはサーバー上に置かれているので。一回アクセスしたらキャッシュされるかもしれません
確かに、同じファイルパスなら、キャッシュを使う
データは、ajax で、JSON でやりとりすることが定番
- 580 :質問者:2020/05/14(木) 00:27:54.68 ID:XcM6moP2.net
- >>579
はい、ありがとうございます。
- 581 :デフォルトの名無しさん:2020/06/20(土) 11:09:53 ID:iiFnSxTf.net
- できる訳ないだろうなと思いつつ聞くんだけど、javascriptでローカルのファイルを別のディレクトリに移動させたりすることってできる?
- 582 :デフォルトの名無しさん:2020/06/20(土) 13:24:24 ID:hfA4Ec7B.net
- つNode
- 583 :デフォルトの名無しさん:2020/06/20(土) 13:27:05 ID:hfA4Ec7B.net
- つcscript/wscript
- 584 :デフォルトの名無しさん:2020/06/20(土) 20:45:20.50 ID:iiFnSxTf.net
- >>582
これはサーバサイドでjs書いたときの話だもんね
ユーザーがブラウザ操作してる時に動くブラウザ上のjsでファイル操作がしたいんだよなあ
そんなこと出来たらやべーからまあ無理なんだろうけど、なんか代わりの手段ないものか
- 585 :デフォルトの名無しさん:2020/06/20(土) 21:17:03.49 ID:hfA4Ec7B.net
- >>584
プラットフォームとしてブラウザが欲しいのなら electron = chromium + node がそれだろ。
代表アプリはatomとVSCode。
サイトのJSでユーザーのローカルファイルを弄りたいというのなら、それが出来るようなら困るだろ。
- 586 :デフォルトの名無しさん:2020/06/20(土) 21:21:46.31 ID:hfA4Ec7B.net
- >>584
あと、今現在使っていいか、使えるか、というのはあるが、技術的にはActiveX。
wiki読めば大体分かるはず。
- 587 :デフォルトの名無しさん:2020/06/29(月) 12:03:45.83 ID:Na3g7Gku.net
- うんち
- 588 :デフォルトの名無しさん:2020/06/29(月) 12:04:05.78 ID:Na3g7Gku.net
- htmlタグに書くonclick=の中には
JSの処理を直接書くこともfunction(){}と書いてその中に処理を書くことも、どちらもokですか?その違いはありますか?
- 589 :デフォルトの名無しさん:2020/06/29(月) 12:07:23.28 ID:Na3g7Gku.net
- onclick=のあと関数名(関数が入った変数)を書く場合は()は書かないほうがいいですか?書くべきですか?
<button onclick='unko'> or <button onclick='unko()'>
unko=function(){
alert('unko!');
}
みたいなときです。
- 590 :デフォルトの名無しさん:2020/06/29(月) 12:51:41.62 ID:I7ZZ3pdS.net
- 最初に喧嘩売ってきてわろた
- 591 :デフォルトの名無しさん:2020/06/29(月) 12:54:40.10 ID:ze6DZkOI.net
- >>588
こういう感じで、直接内容も書けるみたい
on@click='con@sole.log("abc")'
注意! 書き込めないため、@ を入れました
>>589
on@click='unko()'
みたいに、すべて( ) が付いている
それと、JavaScript の質問は、web制作管理板の方へ書き込んでください!
こちらの板は、web制作管理板が荒らしに荒らされた時に、
緊急避難的に立てられたものだから、今は使われていない
- 592 :デフォルトの名無しさん:2020/06/29(月) 21:14:29 ID:WKcpUWSm.net
- >>587-589
オムツがまだ取れてなくてウンコ臭い初心者はWeb板へ
何度も言われていることだが
それ以前にお前レベルの超超超超初心者はそもそもここ(5ch)に来るべきではない
各自が勝手に意見を言ってるだけだから、それなりの確率で間違いや勘違いはどうしても発生する
それを自分で修正する能力がないうちは、5chを使うのは止めた方がいい
超超超超初心者なら、少なくとも間違っていたら訂正してもらえる場所、
つまり本か信頼出来るWebサイトを参考にするべきだ
なお俺はお前みたいなウンコお漏らし初心者用の本やサイトは知らない
というか、そんな、始めて3時間で通過するレベルの事柄を、ネットで質問しようとすること自体、かなり頭がおかしい
少なくともお前はプログラマには向いてないし、間違って就職しても浮きまくって仲間に入れず不幸な人生になるから止めとけ
それを教えてもらいたければ、「1週間の集中講座ででWebページ開設出来ます!」みたいなセミナーとかに行け
JavaScriptの部を始めて10分後にはそれについて教えてくれるだろう
- 593 :デフォルトの名無しさん:2020/06/30(火) 01:12:09.33 ID:l6PnVpoX.net
- >>552
通りすがりだけどソレみて長年のモヤモヤがはれました、ありがとう。
- 594 :デフォルトの名無しさん:2020/07/23(木) 00:01:42.43 ID:qAfVnVsp.net
- $("div").click(function())
- 595 :デフォルトの名無しさん:2020/07/23(木) 00:02:03.83 ID:qAfVnVsp.net
- $("div").click(function(){
})
- 596 :デフォルトの名無しさん:2020/07/23(木) 00:05:54.40 ID:qAfVnVsp.net
- $("div").click(function(){
$(this).css('background','red');
})
のこの$(this)が$("div")を指す理由はなんですか?
Javaではthisというのはそれを定義したクラスのインスタンスを指すと習いましたが。
- 597 :デフォルトの名無しさん:2020/07/23(木) 00:38:57.14 ID:cGFBf2BV.net
- jQuery, Haxe のthis は、JavaScript/TypeScript のthis とは異なる。
this がwindow を指したり、おかしな部分があるので、それを変えている
それと、JavaScript の質問は、web制作管理板の方へ書き込んでください!
こちらの板は、web制作管理板が荒らしに荒らされた時に、
緊急避難的に立てられたものだから、今は使われていない
- 598 :デフォルトの名無しさん:2020/07/23(木) 07:12:59.16 ID:qAfVnVsp.net
- >>597
「おかしな部分があるので、それを変えている」とは?
- 599 :デフォルトの名無しさん:2020/07/23(木) 07:13:47.98 ID:qAfVnVsp.net
- thisの正体を見分けるコツはないですか?
- 600 :デフォルトの名無しさん:2020/07/23(木) 07:32:15.26 ID:/b5pS+w+.net
- >>596
> のこの$(this)が$("div")を指す理由はなんですか?
DOM APIとの互換性
例えば、これのイベントハンドラの中身を書き換えるならば
$("div").click(function(){
$(this).css('background','red');
})
このようになる。(おまけで引数のjQuery eventを追加)
$("div").click(function(event){
this.style.background = 'red';
})
このイベントハンドラ(function)はDOM APIと互換性があるので全く同じように使える。
(引数のeventはjQuery eventではなくDOM APIの eventだがある程度の互換性がある)
divElement.addEventListener('click', unction(event){
this.style.background = 'red';
})
つまりイベントハンドラをDOM APIのものと互換性があるようにしているのが理由
そうすることで、コードを相互に変換しやすくなる。
例えば後からjQuery化するときなど少しずつ移植できる。
- 601 :デフォルトの名無しさん:2020/07/23(木) 07:36:27.79 ID:/b5pS+w+.net
- >>599
thisは実行時に変わるからコードを見てもわからない
つまり呼び出されているコードを見てもわからない。
「誰が呼び出しているか?」を知る必要がある。
同じthisであっても「あれ」に登録して「あれ」から
呼び出されれば「それ」とは違うthisの場合がある。
だからthisが何かは仕様を調べるしかない
関数の引数にobjが入ってる場合、このobjの正体はなんですか?と
言ってるのと同じ質問だよ
- 602 :デフォルトの名無しさん:2020/07/23(木) 07:39:49 ID:/b5pS+w+.net
- >596
Javaではthisを変えられることができないが
JavaScriptはthisは呼び出し側で与えるオブジェクト
JavaScriptだけではなくRubyやPerlなどいくつかの言語は呼び出し側でthisを変更できる
- 603 :デフォルトの名無しさん:2020/07/23(木) 08:18:34.22 ID:qAfVnVsp.net
- >>600-602
ありがとうございます。
深いですね。
まだちゃんと理解できてないですが
ゆっくり吟味して考えてみます。
- 604 :デフォルトの名無しさん:2020/07/23(木) 08:20:56.24 ID:qAfVnVsp.net
- this=eventとなっているということかな?
- 605 :デフォルトの名無しさん:2020/07/23(木) 08:24:35.38 ID:/b5pS+w+.net
- >>604
違うぞ。eventはおまけ。thisの話とは直接関係ない
- 606 :デフォルトの名無しさん:2020/07/23(木) 08:25:10.27 ID:/b5pS+w+.net
- ようするにjQueryはブラウザ標準のDOM APIと
互換性をもたせて作られているということ
- 607 :デフォルトの名無しさん:2020/07/23(木) 20:38:07.50 ID:QHkNbR5l.net
- >>599
ID:/b5pS+w+ の言っていることは全面的に正しいが、補足すると、
> thisの正体を見分けるコツはないですか?
こんな事を言っている時点で糞サイト(或いはゴミ本)に騙されているから止めとけ。
見分ける必然性も意味もない。単なる暗黙の引数程度でしかなく、
実際にそれなりに組織的にコーディングするとcallはそれなりに使う。
DOM APIのthisがe.currentTargetを指すのはそもそもJava用の仕様、
つまりJavaでもクライアントスクリプトを書けるようにする為の仕様らしい。(とここ5chで聞いた)
しかし現在はJavaで書く奴なんて一人もいないし、JavaScriptにおいてはe.targetを全面的に使うのが正しい。
理由は、
1. thisにはe.currentTargetが入っているが、マトモなサイトなら通常はbubbleを利用する為、e.target主体で書くことになる。
つまりこの仕様のthisでは使い物にならない。
2. e.currentTragetで役に立つ場合は、Elementに直接onXXXかaddEventListenerした場合だが、
こんな事をやっているのはjQueryを使っている程度の簡単なサイトだけ。
やれば分かるがbubbleを利用した方が実行効率もよく、コードも綺麗になるから、マトモなサイトは全部そうしてる。
ただし、Elementに直接貼った方が直感的で分かりやすいので、jQueryのような簡単/初心者向けの場合には活用される。
(なおjQueryでもbubble主体で書くことは可能ではあるが、それをやるとjQueryの意味がほぼ無くなるので普通はやってないと思う)
- 608 :デフォルトの名無しさん:2020/07/23(木) 20:39:00.72 ID:QHkNbR5l.net
- 3. それなりに組織的にコーディングすると、どうしてもイベントハンドラで共通の関数を使いたい要求が出てくる。
しかしイベントハンドラだとthisがe.currentTargetによって潰されているので、共通関数をクロージャ(最終段はグローバル)で掴むしかないが、
クロージャはクローズ(追加不能だしコード配置が限定される=C++で言うクラスはクローズ、namespaceはオープンと同じ意味のクローズ)ので、
現実的には使いにくく、俺はイベントハンドラを集めたオブジェクト(その中に共通関数も入っている)をthisとしてcallし直して、
イベントハンドラ内ではthis.my_sub_function()で共通関数を呼べるようにしている。
この場合、thisは単なるオブジェクトなので、継承出来るのがいい。(共通関数の共通関数を__proto__側に追い出せる)
どうせthisが使い物にならない仕様なので他の連中も同様にやっているとは思う。
なお俺はjQuery不要派だがjQuery自体は初心者には分かりやすく偉大だと思っている。
実際にjQueryを使っていて問題ないのなら使うこと自体も悪いことではない。
ただしそれは世の中のマトモなサイト≒ガチのプログラマーが本気で書いたサイトではほぼ使われていない手法だということも理解しておいた方がいい。
といっても今の君には分からないだろうが、イベントハンドラ内でthisをe.currentTargetとして利用することはガチのサイトではほぼ無い、ということ。
今はどうせ何も分かってない状態なんだろうから、それならイベントハンドラ内ではthisを使わずe.currentTargetを使う癖を付けた方が多分いい。
それ以前にbubbleを使うようにした方がいいが。
- 609 :デフォルトの名無しさん:2020/07/23(木) 20:41:48.09 ID:QHkNbR5l.net
- といっても多分さっぱり何がなにやら、だと思うが、そういうものだと思っておいてくれ。
質問の質問を受けていたら話が進まないのでそれは断る。
- 610 :デフォルトの名無しさん:2020/07/23(木) 21:58:10.24 ID:k24nyzXR.net
- >>607
> (なおjQueryでもbubble主体で書くことは可能ではあるが、それをやるとjQueryの意味がほぼ無くなるので普通はやってないと思う)
イベントのキャプチャフェーズとバブリングフェーズの話をしてるなら
jQueryはバブリングフェーズしか対応してません
jQueryの意味がなくなる?なぜですか?
そもそもIE8以前がキャプチャフェーズに対応してないので
それ以前からあるjQueryでは実装が不可能です。
(jQuery 4.0では実装されるらしい)
間違ったことを書かないでください
- 611 :デフォルトの名無しさん:2020/07/23(木) 22:00:14.35 ID:k24nyzXR.net
- >>608
> 現実的には使いにくく、俺はイベントハンドラを集めたオブジェクト(その中に共通関数も入っている)をthisとしてcallし直して、
> イベントハンドラ内ではthis.my_sub_function()で共通関数を呼べるようにしている。
> この場合、thisは単なるオブジェクトなので、継承出来るのがいい。(共通関数の共通関数を__proto__側に追い出せる)
やめましょう。無関係のイベントハンドラをまとめることは
単一責任の原則に違反しています。
- 612 :デフォルトの名無しさん:2020/07/23(木) 22:01:00.61 ID:k24nyzXR.net
- >>608
> イベントハンドラ内でthisをe.currentTargetとして利用することはガチのサイトではほぼ無い、ということ。
いいえ。殆どがthisを使っています。e.currentTargetは冗長なだけです。
- 613 :デフォルトの名無しさん:2020/07/23(木) 22:41:43.25 ID:k24nyzXR.net
- >>607
> DOM APIのthisがe.currentTargetを指すのはそもそもJava用の仕様、
> つまりJavaでもクライアントスクリプトを書けるようにする為の仕様らしい。(とここ5chで聞いた)
逆です。Javaではe.currentTargetを使い、thisは使えません。
(当時の)Javaでは言語仕様上の制限でイベントハンドラとして関数を使用することはできません。
イベントハンドラはオブジェクトである必要があります。
イベントハンドラ自体がオブジェクトであるため、thisはイベントハンドラオブジェクトになります。
そのためJavaでthisは使えません。
また昔のIEはaddEventListnerがなくattachEventを使いますが。
attachEventの場合thisはwindowでありe.currentTargetではありません。
つまり初期のIEのDOM APIはもちろんJavaでも使えますが
event.srcElement(e.currentTarget相当)しか実装されてないということです。
thisがe.currentTargetなのはJavaScriptのために作られた仕様です。
- 614 :デフォルトの名無しさん:2020/07/23(木) 22:44:12.81 ID:k24nyzXR.net
- >>607
> JavaScriptにおいてはe.targetを全面的に使うのが正しい。
いいえ。e.targetは廃止されてます。
https://developer.mozilla.org/ja/docs/Web/API/Event/target
わざと正反対のことを書いてるんですかね?
- 615 :デフォルトの名無しさん:2020/07/23(木) 22:47:04.66 ID:QHkNbR5l.net
- >>610
キャプチャフェーズの話はしてない。
なお俺の判断では、キャプチャフェーズは余程のパッチ当て以外では使うべきではない。
あれは使わないでも十分組めるし、そもそもキャプチャフェーズを使わなければならないシチュエーションがまるでない。
だから俺は何であの仕様が入れられたのか不明なのだが、君はそれが分かるか?
具体的に、キャプチャフェーズのユースケースを知りたい。
> jQueryの意味がなくなる?なぜですか?
jQueryは基本的に
queryしたElementに何か(この場合はイベント追加)するのを宣言スタイルで短く分かりやすく書けるのが売りだろ。
バブル主体で書くとそもそもqueryしないから、jQueryを使う意味がないんだよ。
それはやれば分かる。分からないのはやってないからでしかない。
> やめましょう。無関係のイベントハンドラをまとめることは
> 単一責任の原則に違反しています。
無関係ではないんだよ。
そしてその考え方がJava的オブジェクト指向の限界であり、JavaでGUIを誰もやらない理由だよ。
いずれにしても、JavaのGUIなんてキングオブゴミだし、GUIに関してはJava的オブジェクト指向は一旦捨てた方がいい。
実際、.NETにしても、データはバインディングでグローバルストア方式になってるだろ。
(末端のオブジェクトにデータを持たせている風に見せているが、
現実問題としてそれだと状態のセーブが出来なくて(やりにくくて)いきなり詰むから、実際はバインディングでゴニョゴニョ出来るようにしている)
だからJava的な、末端のオブジェクトにデータもイベント関数も全部持たせる、というのがGUIに絶望的に向いてないんだよ。
だからJavaではろくなGUIが作れない、というよりは無駄に苦労するので誰もやらない。その結果が今だ。
> いいえ。殆どがthisを使っています。e.currentTargetは冗長なだけです。
それは君がbubbleを使ってないから。jQueryもだがフレームワーク等は仕様はDOMAPIに合わせているだろうけど、
実際にbubbleの場合はe.currentTargetなんて使い物にならないから当然thisも使わない。
これもやれば分かるだけのこと。君はやってないだけ。
- 616 :デフォルトの名無しさん:2020/07/23(木) 22:49:01.44 ID:k24nyzXR.net
- >>615
> バブル主体で書くとそもそもqueryしないから
そういう意味ですか?
意味不明なので他のわかりやすいサイトを
探し出してください
- 617 :デフォルトの名無しさん:2020/07/23(木) 22:49:21.91 ID:k24nyzXR.net
- ×そういう意味ですか?
○どういう意味ですか?
- 618 :デフォルトの名無しさん:2020/07/23(木) 22:50:10.57 ID:k24nyzXR.net
- >それは君がbubbleを使ってないから。
bubbleを使うとやらのコードを書いてください
- 619 :デフォルトの名無しさん:2020/07/23(木) 22:53:40.02 ID:k24nyzXR.net
- Description: The current DOM element within the event 「bubbling」 phase.
https://api.jquery.com/event.currentTarget/
- 620 :デフォルトの名無しさん:2020/07/23(木) 22:53:41.19 ID:QHkNbR5l.net
- >>613
いや俺はthisがオブジェクトそのものだと聞いたが、
まあJavaの仕様については俺は詳しくないし、いずれにしてもスレチだし、この話は止めよう。
>>614
それは初耳だが、
LS見た限り当然載っているから移動されただけではないか?
そのページのLSの所押すと割と丁度いい場所に飛ぶから見てみればいい。
やれば分かるが、バブルで組んだ場合にe.target無しでは組めない。
廃止されるにしても、名前が変わって何かが定義されるとかであって、丸々捨てられることはないよ。
そしてbubbleを使わずに一々全Elementにイベントを付けていくのは完全に旧式であって、
マトモなサイトでは誰もそんなことやってない。
それも確認してみればいい。
- 621 :デフォルトの名無しさん:2020/07/23(木) 22:54:31.55 ID:k24nyzXR.net
- jQuery event.currentTarget
日本語訳 説明:イベントバブリングフェーズ内の現在のDOM要素。
- 622 :デフォルトの名無しさん:2020/07/23(木) 22:55:20.17 ID:k24nyzXR.net
- >>620
だからjQueryはバブルしかサポートしてないし、
jQueryのevent.currentTargetは(DOM APIと同じで)
イベントバブリングフェーズ内の現在のDOM要素。
- 623 :デフォルトの名無しさん:2020/07/23(木) 22:57:37.04 ID:k24nyzXR.net
- >>620
> そしてbubbleを使わずに一々全Elementにイベントを付けていくのは完全に旧式であって、
jQueryでは全Elementにイベントハンドラを使えずに、
ocumentエレメントにイベントハンドラを付ける場合このように書きます。
$(document).on('click', 'a', function() {
$(this).css("background": "red");
});
知ってましたか?w
- 624 :デフォルトの名無しさん:2020/07/23(木) 23:16:41.69 ID:k24nyzXR.net
- https://jsfiddle.net/m8q15376/
例えばこの2つのコードはイベントハンドラをつけてるところは違いますが
同じよう動作をします。thisが使えない?何の話でしょうかねw
$("#id1").on('click', 'a', function() {
$(this).css("background", "red");
});
$("#id2 a").on('click', function() {
$(this).css("background", "red");
});
- 625 :デフォルトの名無しさん:2020/07/23(木) 23:18:15.34 ID:QHkNbR5l.net
- >>622
君と話が通じないのは君がbubble主体で組んだことがないからだよ。
ただし、bubbleの重要性に触れた『初心者向け』サイトは皆無で、俺が知ってるのはuhyohyoだけ。
気になるならそこでも読むんだね。
或いはそこら辺のまともなサイト、ガチの商用サイトだとbubbleを使ってない方が珍しい(と思いたい)から、見てみるとか。
ただし日本のサイトは割とまじで糞で、20年前と同じですねー、ってのも普通にあるからそういうところは駄目だが。
(ここ5chもそうだし)
ちなみに2度目だが、フェースの話はしてない。
イベントがバブルするのを「イベントバブル」と言うんだよ。
これはWPF等でも使われているからJavaScriptのローカル用語ではなくてプログラミング用語だ。
(といっても俺が知っている限りイベントバブルを最初に実装したフレームワークはHTMLで、
それらをWPF等も採り入れたから当然同じ用語になっているだけだが)
そしてそれをbubbleと(短く短くとうるさいお前ら用に)略して言っているだけ。
もう一度言うが、フェーズの話はしてないし、そもそも既に書いたように俺はキャプチャフェーズの存在価値が分からない。
今のところの見方では、あれは不要な仕様だと思う。
jQueryでも対応してないのなら、実際それで困ることはないからだろ。
>>623
知ってる。そしてそれだとjQueryを使う意味が無い=生のDOMAPIでも同様に書けるだろ
だからみんなjQueryを捨て始めてるだけ。
勿論君のようにjQueryが無いと死んじゃう人がそれに抗っているのも知ってる。
- 626 :デフォルトの名無しさん:2020/07/23(木) 23:21:08.33 ID:k24nyzXR.net
- もうわかりましたね? ID:QHkNbR5l はイベントデリゲーションのことを
バブルなんて言ってるわけです(笑)
https://developer.mozilla.org/ja/docs/Web/API/Event/target
> event.target プロパティは、イベントデリゲーションを実装するために使用できます。
所詮オレオレ用語を使うレベルなんですよ
- 627 :デフォルトの名無しさん:2020/07/23(木) 23:22:10.11 ID:QHkNbR5l.net
- >>624
だからそれ明らかにイベントバブル使ってないじゃん。
それを>>623形式で書いた時にe.targetが無いとどうしようもないでしょ。
それを言ってるんだよ。
- 628 :デフォルトの名無しさん:2020/07/23(木) 23:22:48.51 ID:k24nyzXR.net
- >>625
> 知ってる。そしてそれだとjQueryを使う意味が無い=生のDOMAPIでも同様に書けるだろ
では生のDOM APIを使ってe.targetなしで書いてみてください。
できますか? jQueryはe.targetなしで書きました。
- 629 :デフォルトの名無しさん:2020/07/23(木) 23:23:26.39 ID:k24nyzXR.net
- >>627
> だからそれ明らかにイベントバブル使ってないじゃん。]
最初に言ったよね?イベントバブル使うコードかけって
なんでお前かけないの?
- 630 :デフォルトの名無しさん:2020/07/23(木) 23:24:31.81 ID:k24nyzXR.net
- >>627
1. jQueryのコードはイベントバブルしか使わない(使えない)
2. >>623のコードはe.targetを使ってない
ここまではいいですかねぇ(呆れ)
- 631 :デフォルトの名無しさん:2020/07/23(木) 23:28:46.58 ID:QHkNbR5l.net
- >>626
まあ君との話はもうする価値がないから終わりにするけど、
イベントバブルはオレオレ用語ではないと思うよ。
イベントデリゲーションってのは確かにそこにあるが、初めて聞いたが。
e.targetについては、
> 複数の要素に同じイベントハンドラを割り当てて、どれかでイベントがあったときに何かさせたいような場合、e.target はとてつもなく有用なものです。
> 複数の要素に同じイベントハンドラーを割り当てて、どれかでイベントがあったときに何かさせたいような場合、e.target はとてつもなく有用なものです。
と、重要だからか?まじで2回書いてあるし、それが廃止とか使用禁止とかにはならないよ。
https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Events
- 632 :デフォルトの名無しさん:2020/07/23(木) 23:28:53.91 ID:k24nyzXR.net
- > イベントバブルを最初に実装したフレームワークはHTMLで、
笑うしかないわw HTMLがフレームワークとかw
- 633 :デフォルトの名無しさん:2020/07/23(木) 23:29:21.73 ID:k24nyzXR.net
- > イベントデリゲーションってのは確かにそこにあるが、初めて聞いたが。
はい、初めて聞くレベル
- 634 :デフォルトの名無しさん:2020/07/23(木) 23:29:24.10 ID:HWiYfbuZ.net
- >>614
そのMDNの廃止されたって言うのは以前の仕様書が廃止って意味じゃないの?
- 635 :デフォルトの名無しさん:2020/07/23(木) 23:30:10.44 ID:k24nyzXR.net
- > e.targetについては、
> 複数の要素に同じイベントハンドラを割り当てて、どれかでイベントがあったときに何かさせたいような場合、e.target はとてつもなく有用なものです。
↓このコードが複数の要素に同じイベントハンドラを割り当てて、どれかでイベントがあったときに何かさせているコード
https://jsfiddle.net/m8q15376/
$("#id1").on('click', 'a', function() {
$(this).css("background", "red");
});
- 636 :デフォルトの名無しさん:2020/07/23(木) 23:56:14.14 ID:k24nyzXR.net
- まとめ
こいつはイベントデリゲーション(複数の要素に同じイベントハンドラを割り当てるコード)を
jQueryで書いているコードを見たことがない、もしくは見たことあっても気づかないで
jQueryでもDOM APIと同じように書くしかないはずだ!だからjQueryを使う意味がない!と考えていたようだが
そのイベントデリゲーションこそjQueryでシンプルに書けるコードの一つだったという話です。
- 637 :デフォルトの名無しさん:2020/07/24(金) 00:01:31.32 ID:2LubhzPR.net
- >>633
というかね、「イベントバブル」をオレオレ用語だと噛みついてくる時点でお前はどうかしてる。
JavaScript使ってて今まで聞いたことがないってのは本当に酷い。
MDNにも「イベントのバブリング」とは書いてある。
> https://developer.mozilla.org/ja/docs/Web/Guide/Events/Creating_and_triggering_events
uhyohyoでも「イベントバブリング」って言ってる。
> https://uhyohyo.net/javascript/3_3.html
-ing形だから通じないって事も無いだろうし、そもそもbubbleフェーズを表すと勘違いしても大体通じる内容でしかない。
そこで噛みついてくる意味が分からん。
JavaScriptが世のGUIを席巻しつつあるのは、イベントバブルの功績が大きい。
これがあるのと無いのとでは、GUIの組みやすさの次元が違うんだよ。
だから.NETもWPFで、GTKでもGTK+3から採用されてる。(Qtは知らん)
それを全く使わずにJavaScriptのGUIを語るのは完全に間違ってる。
そこら辺がjQueryしか出来ない人(つまり君とか)の問題だと思うよ。
jQueryしか出来ない人が馬鹿にされているのは君も知っているだろ?そういうことだよ。
- 638 :デフォルトの名無しさん:2020/07/24(金) 00:22:53.71 ID:fMjVnhWI.net
- お前のオレオレ用語っていうのは「バブル主体」だアホめ
なんだよバブル主体って(笑)
- 639 :デフォルトの名無しさん:2020/07/24(金) 00:24:19.77 ID:fMjVnhWI.net
- >>637
> JavaScriptが世のGUIを席巻しつつあるのは、イベントバブルの功績が大きい。
だから、イベントバブルじゃなくてイベントデリゲーションな(笑)
何がオレオレ用語なのかわかってない。
用語の使い方を間違ってんだよお前は。
jQueryはイベントバブルを使ってる
- 640 :デフォルトの名無しさん:2020/07/24(金) 00:25:21.34 ID:fMjVnhWI.net
- 何度も言うがjQueryを使うということは
イベントバブルを使ってるということだ
- 641 :デフォルトの名無しさん:2020/07/24(金) 00:28:52.61 ID:fMjVnhWI.net
- ちなみにイベントデリゲーションという用語は
MDNでも使われているが、jQueryが最初に使った用語なんじゃないかと思ってる。
もともとはjQueryでイベントデリゲーションを使う時
delegateというメソッドを使っていたから。それが廃止になりonに統一された。
onに統一された結果、jQueryでイベントデレゲーションを使ったコードと
使ってないコードの差異が減って、e.targetを使わずにthisでコードが書けるようになった。
jQueryでイベントデレゲーションを使うのは、DOM APIを使うよりも
格段にシンプルに書けるようになっている
無関係のイベントハンドラを統合するという単一責任の原則に反するコードを書くことなく
イベントデレゲーションを使うことが可能になっている。
- 642 :デフォルトの名無しさん:2020/07/24(金) 00:33:37.06 ID:2LubhzPR.net
- >>638-640
半島に帰れ
- 643 :デフォルトの名無しさん:2020/07/24(金) 01:22:11.42 ID:2LubhzPR.net
- >>627
訂正、>>624でもバブルを利用しているようだ。
jQueryはこの形式だとDelegated event handlers として扱われ、
on時点でサブクエリして一致した子要素に付けるのではなく、
内部的にバブルしてきたイベントを使い、実行時にクエリして一致を確かめるようだ。(後半部は予想、実装依存)
https://api.jquery.com/on/
だから確かにバブルを利用してはいるが、これだともっさり遅くはなる。(とはいえGUIの場合は大抵問題にはならない)
jQueryは使ってないし今後も使う予定もないので仕様には詳しくなく、見た目で判断してしまった。
なるほど何だかんだで上手く出来てはいる。
が、まあ、いずれにしてもこれをDOMAPIだけで書くのも別段苦労しないし、
jQuery内部でe.targetを使っているだけで、e.targetが無ければjQuery自体が組めないだけでしかない。
>>641
イベントデリゲーションの方がかなりオレオレ用語だと思うが。
確かにMDNには書いてあるが、俺は今まで聞いたこともなかったし、そもそもそれを「デリゲーション(キリッ」とかいうのもどうかしてると思うが。
OOPで言う委譲に当たるから「デリゲーション」なんだろうが、それはOOPで言う「継承か委譲か」、という話とは全然違っていて、
単に親要素でしかなく、子要素とは何の関わりもない。(一応包含してはいるが)
だから無理やりOOP的な解釈をすれば「デリゲート」しかないのだろうけど、
それは、世の中の全てを無理矢理OOPで解釈するJava脳みたいな感覚を受け、
Java以外で普通にOOPを分かっている奴からしたら相当気持ち悪い使い方だし、実際に流行ってもないだろ。
これが気持ち悪いと思わないのは君がOOPを理解してないからだよ。
ただし俺はGUI自体がOOPにフィットしないと思っているから、GUIしかやらないのなら理解している必要はないとも思うけども。
そして君は都合の悪い>>634は無視なのか?
既に言ったが、現在の状況でe.targetが無くなることはない。
ただ、あの辺デタラメに拡張して仕様がグダグダなので、整理しろよな、とは思うが。
- 644 :デフォルトの名無しさん:2020/07/24(金) 01:48:12.97 ID:2LubhzPR.net
- ちなみにgoogle、
イベントバブル 約 22,500,000 件 (0.43 秒)
イベントデリゲーション 約 23,600 件 (0.28 秒)
- 645 :デフォルトの名無しさん:2020/07/24(金) 06:57:14 ID:9v9Epd9J.net
- バブリングフェーズとイベントデリゲーションはバスタブとミカンくらい意味が違うがおんなじもんだと思ってたわけ?w
バブリングフェーズはイベント伝搬のステージのことで、
div
a
a
という構造ならhtmlからdiv→aと伝搬してくるのがキャプチヤリングフェーズ。
その後a→divとhtmlまで戻っていくのがバブリングフェーズ。
イベントデリゲーションは2つのaにイベントパンドラ設定するよりdiv1つに設定してaのイベントまとめてハンドルしてもらいましょうというやり方。
a(子)のイベントハンドリングをdiv(親または祖先)に委譲(delegate)するからイベントデリゲーション。
ちんちんとマンチェスターユナイテッドくらい意味が違うけどおんなじもんだと思ってたわけ?w
466 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver.24052200