+ JavaScript の質問用スレッド vol.124 + [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
JavaScript を自ら学ぶ人のための質問スレッドです。 >>2-4 のテンプレを読んだ上で質問してください。 ■質問を書く上で (1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。 (2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。 (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など) (3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。 (4) 常に自発的に調べる心構えを持ってください。 具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。 わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。 (5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。 (6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。 ※必ず「問題の事象が再現されること」を確認してください。 必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。 (7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。 (8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2 の質問テンプレートを活用してみてください。 (9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。 + JavaScript の質問用スレッド vol.123 + http://peace.2ch.net/test/read.cgi/hp/1423915644/ (ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです) これとは意図が違うの? function Hoge() { } Hoge.prototype.piyo = 123; var hoge = new Hoge(); console.log(hoge.piyo); インスタンスの意味がわからないのなら、 オブジェクト指向を知らないという事だから、JavaScript は無理 JS は、prototype と言って、普通のオブジェクト指向じゃないから、さらにややこしい まずこの本で、普通のオブジェクト指向を学ぶ。 スッキリわかる Java入門 第2版、2014 それから、JSのprototype を学ぶ いきなりprototypeでいいんじゃないかな。 たしかにjsのprototypeは分かりにくいけどクラス使う言語からやってくると、もっとわかんなくなりそう JavaScriptでもclassからやったほうがいいんじゃないかな? classほうがわかりやすいし。それからprototypeでも遅くはないよ。 そもそもprototypeって普段から意識して使ったこと無いしね 内部実装よりも言語仕様の方が重要 分かりにくいのはprototypeプロパティの意義であって それはプロトタイプベースの本質ともオブジェクト指向の本質とも関係はなく ただのJSのチンケな旧クラスシステムということでしかない 学習としては__proto__を使って素直で本質的なプロトタイプベースOOPを覚えるか class構文を使ってよりまともな新クラスシステムに慣れる形が良い class { プロパティ メソッド } 普通の言語で、これで済む所を、JS では自分で実装していかないといけない メソッドは、__proto__ で、親クラスへつなげて行くとか、 実行環境を作る人と、同じ技術を学ばなければならない。 こんなのは、インタープリタを作る人の話 オブジェクト指向をわかっていない奴だと、 .constructor, .prototype とか、何もわからずに使うだけ それはちょっと違うかな 物は言いようでクラスに縛られること無くOOPが出来るというのはプロトタイプベースのメリットだけど、 だから自作しないといけないというわけではなくてプロトタイプベースに標準のクラスシステムがあっても何も矛盾しない というかJSはES5までプロトタイプの設定ができなくて 予め用意された貧弱なクラスシステムを使わざるを得ないといけないということが問題で、 むしろ変わったクラスベース言語と言っても良いくらいだった .constructor, .prototypeもオブジェクト指向の本質とは何の関係もない、ただJSのクラスシステムの癖なだけ というか元々JSは手続き型チックに使うことを想定された簡潔なDOM操作スクリプト言語として作られたのであって それに一応OOPもできますよと言うことでnew演算子を取ってつけただけ プロトタイプベースなのも、崇高な目的があるわけじゃなくて OOPが最低限できる素朴な仕組みを用意できれば良かったから なんでもありの言語にお堅い規約やらなんやらを詰め込もうとするから無理がでてくる まあ単に素朴なだけだけどね 鋼の様な硬い制限は言語のメリットを殺すだけで良くないが、一方で柔軟さ活かせばゴムの様に「矯正力」を発揮させる事ができる 固い考え方に於いての問題を問題として弾くのではなく、問題を飲み込み問題では無くす事ができる その様にJSらしいプログラミング思想を受け入れることがJS克服の鍵 jsは凄くやらかい言語だよね。欲を言えばマクロが欲しいけど、現状でも割と何でも出来る マクロはsweet.js型のが検討された事があるがまだまだデコレータとか先に検討すべき機能はたくさんあるし Object.observeみたいにその時の流行りと勢いで大胆な機能を入れると、後悔することが教訓になっているので慎重にもなるだろう 今は立案から策定までのペースが早くて10年後もその機能があって良いのかを考えにくくなってる 慎重で優秀なメンバーがいるおかげか高Stageでギリギリ落とされるものもチラホラ その時は不満でも1年くらいして落ち着いて考えてみるとやっぱり入れ無くて良かったのかなと思える そういえば末尾最適化が来てたっけChromeに あれアロー関数かつ三項演算子でも使えるんかね。今度実験してみよ すみません洋書でも知ってたら教えて頂きたいのですが、 jqueryをネイティブのJSに書き直す方法を網羅した リファレンス本や虎巻、早見表等の書籍がありましたら 教えて下さい。 >>221 不完全なのならネットにいくらでもあると思う。 でも網羅してるのはないだろうね。 例えば、onの二番目の引数にselectorを使用した書き方(旧delegate)とか 置き換える方法が書いてあるの見たことない。 http://js.studio-kingdom.com/jquery/events/delegate 網羅しているのがあれば、jQueryがどれだけ複雑な処理を 簡単にかけるかってのがよく分かるんだけどな。 この際だからネイティブのJSに置き換えるんじゃなくて ReactとかAngularに置き換えたら? はっきり言って他のフレームワークに置き換える意味はあるけど jQueryをネイティブのJSに置き換える意味は殆どないよ jQuery は、タグにイベントハンドラーを付けて、 そのタグの先祖のタグを削除しても、メモリリークをしないほど、すごい! jQueryをどう使ってるかによるんじゃない? Promise、Animation、Fetchなんかは置き換えできるよね でも一番地味な要素の取得・操作やイベント周りは結局ラッパーを書くことになると思うよ そこだけjQuery使うというのも大有りだけど、もしasync-awaitを広範囲に使っているのなら 組み合わせが難しくなるので完全に外すことを検討して良いと思う awaitとイベントを柔和させるためにはasync-iteratorやObservableが必要だけど、まだ実装されてないからね まあwhile(await)を使って工夫すればなんとかそれっぽく書けるんだけど、 今はまだObservable系のフレームワーク使った方が良いかもね jQueryのAjaxは、Fetchには置き換えられないよ。 Fetchは仕様のレベルでJavaScriptのXMLHttpRequestの機能の 一部しかサポートされていない。今新しい仕様策定中 Promise(Deffered)は仕様が少し違うけど、 これ実質Ajaxぐらいしか使ってないので、Fetchが置き換えれないのなら Promiseに置き換える作業も発生しない。 Animationは置き換えは置き換えでもJavaScriptではなくCSSに置き換えだね jQueryを使ったコードがたくさんあるなら、比較的最近のブラウザでしか 動かないasync-awaitを使っていることはないだろう 将来はasync-iteratorやObservableに変わるということは 今JavaScriptネイティブの古き良きaddEventListenerに変更する意味はあるのだろうか? あと数年ブラウザネイティブでasync-iteratorやObservableがサポートされるまで jQueryのままで良いんじゃね? どうせまた変えなきゃいけなくなるし。 コードは少ないほうが置き換える手間も少なくなるよ Fetchで置き換えられない具体的で有意義な例を出して欲しい 例えばキャンセルは出来るという議論前出てたよね 皆さんご助言ありがとうございます。 ReactとかAngularも検討してみます。 ネイティブの実装方法知らなくても 結果が同じなら書き換えなくていいかもです。 どうもありがとうございます。 >>224 は脱jQueryの指針を表したつもりで jQueryのそれと全く同じ使い勝手のものが標準にあると言う気もないけど そもそもjQueryの機能を完全にカバーできるかで考えるのも変だと思うけどな 因みにキャンセルや進歩状況はbody使えばできるんでなかったか? 調べてみた キャンセル: res = await fetch(''); reader = res.body.getReader(); reader.cancel(); OR res.body.cancel() ダウンロードプログレス: res = await fetch(''); reader = res.body.getReader(); ...... アップロードプログレス: (できない) ただし注意点としてプログレスは勿論キャンセルも実質、最初からReadableStreamで取って行ってるときでないと使えない つまり、req.text()と先にしておいて、後でそれを予想外に長引いているからとreq.body.cancel()などキャンセルしようということはできない まあプログレスやキャンセルが必要なのって大きいファイルの取得のときでしょ、 それで大きいファイル取得するときは最初からblobチャンク取っていく形で良いでしょ、ってことなのかもしれないが 一応素晴らしい解決方法もある Response、body、ReadableStreamが再利用不可なのが問題なので、新しく作ってバイパスしてやればいい つまり、ストリームに割り込むという考え方が必要 res = await fetch(''); reader = req.body.getReader(); res2 = new Response( new ReadableStream({...readerから読み込む...}), {...ヘッダを複製...}); ←キャンセルしたりプログレスが取れる text = await res2.text() あーでもアップロードプログレスはできないって情報あったけど よく考えたらrequest bodyにストリーム使えるわけだから出来そうだな JavaScriptの配列で中身はあるのにforinがまわらない、chromeの開発ツールで見ると1行目の[]の中身がなくて、>でオブジェクト開くと中身があるみたいな状態なんだけど、どなたか経験あります? 説明が難しくて伝わらなかったらごめん Array.prototype.forEach() を使う for in は使わない 配列(Array)の場合はfor inじゃなくてfor(var i=...) とか forEachを使う 詳しくはググれ 配列(Array)の場合はfor inじゃなくてfor(var i=...) とか forEachを使うのはなぜですか? >>238 そうするとわたしの秘密の情報も漏れてしまうのでイヤです。 >>241 早く。こっちは準備OKだよ。 ディスプレイから指出して! >>242 じゃいくよ。 あなたも指出して。 _n ( l _、_ \ \ ( <_,` ) ヽ___ ̄ ̄ ) / / 「指切りげんまんウソついたら針1000本の〜ます」 指出してるよ。お前のディスプレイが対応してないんじゃないの? 自分が嘘をついたからって、 他人も同じだと思わないように >>239 知らない間に私に成り代わった何者かが 投稿していたようだ。 foreachね。やってみるわ。 サンクス すまん、あと連想配列なんだわ。 キャプチャは今携帯だから貼れないから後ではる 配列じゃなくて連想配列? じゃあそれこそが原因じゃん 自己解決しました。 ファイルを配列に打ち込むライブラリが非同期だったので、処理で使えなかったみたい。 初歩的なミスでした 多分もう少し、『誠実に』質問できてたらその日中に解決したと思うよ ついでに見てる人を困らせることも荒らされることも無かった node.jsの質問もここで大丈夫ですか? winstonで取得したdiscordのログをdropboxに上げたいんですが、 ローカルにファイルは保存されているのに ファイル名の変数が未定義とのエラーが出ます どうすればうまく定義できるんでしょうか? https://imgur.com/6Pk8q1b 実際の実行結果がこれで https://imgur.com/ti3Pdkp ローカルのファイル一覧がこれです 何度も試した結果大量のファイルが溜まっています https://www.axfc.net/u/3860035?key=source 件のコードがこれです スクリプトの名前は読み替えて下さい まだ書きかけなので不要なライブラリも呼び出したりしており、 スパゲティ化してると思いますがご容赦ください よろしくお願いします ひとまず自己解決 varとかconstとかってローカル変数だったのね…… 普段使わないから知らなかった スレ汚し失礼しました コメントで /*! ... */ のように ! がついてるコメントの名称と意味を教えてください SASS なら、圧縮しても削除されないコメントだけど Googleは最近そういう記号でもまともに検索できるようになったんだからググったら良いと思うよ 初心者です。「this. は.以降の変数を自分自身のコンパイラーとして呼べる」 と書籍に書いてあったのですが、イマイチ分かりません。 噛み砕いて教えていただけたら嬉しいです >>260 何その書籍。なんてやつ? 捨てていいよ。 Haxe の、this は、常にインスタンス自信を指すけど、 悪名高い、JavaScript のthisは、そうじゃないから嫌われている。 すごく複雑だから、検索して 全然複雑じゃない 複雑だと思うから複雑なだけであって、実際は第0番目の引数ということでしか無い 引数が色んな値になり得るのは当たり前で、どんな場合にどんな値が来るのかを知らないといけないのも当然 難しく考える必要は一切ない >>264 これな。関数a内でthisが使われていた場合 aの呼び出し方でthisが何かが決まる somthing.a() だったら a内のthisはsomthingを示す。 a() だったらwindow.a() or global.a()のシンタックスシュガーと考えるので a内のthisはwindow or globalとなる。 a = a.bind(something) ってすると、 関数aのthisはsomethingに強制できるから a() だとしてもthisはsomthingを指す。 応用の部分がややこしいだけで、基本はメソッドを呼び出した時のオブジェクト(インスタンス)自身 基本を理解してないのに応用から始めるから理解できないだけ >>262 260の者です。 正確に覚えていないのですが、このような趣旨が書かれていました。 僕の勝手な解釈で投稿した感じです >>267 エスパーすると、コンパイラーではなくレシーバーだろ、つまり proto = { prop: hoge } obj = Object.create(proto) のとき、obj.propと記述すると ベースがproto、参照名がprop、this値がobjという参照型の値が作られる その値が解決されるときにthis値のobjをレシーバーとして、参照名と共に ベースであるprotoの[[Get]]関数が呼ばれる もし直接解決の代わりに()演算子によって関数呼び出しされると 結果的にthis値のobjが解決後の関数値をもって作られたコンテキスト上でthis変数のように振る舞う >>271 webpackやGruntやGulpやら、何種類もある ビルド/ビルドツールとかタスクランナーと呼ばれてる SASSに相当するのは一般名AltJS、具体名はTypeScript、CoffeeScriptなどなど > SASSに相当するのは一般名AltJS、具体名はTypeScript、CoffeeScriptなどなど はい、はずれ〜ワラワラ SASSはCSSにコンパイルするもので、AltJSじゃありませ〜ん。JSなんてどこにも出てきませ〜ん /*! ←このコメントの名称を聞いてるのですが・・・ >>257 多分Qt形式のドキュメントコメント。 doxygenで使ったりする。 間違ってたらごめん。 つか、以前唐突に何も根拠なく「韓国人は優秀ニダ」と連呼し始めたのはこれかよ。 韓国政府、日本に関係改善の意思を伝える「韓国人材の日本企業への就職拡大の必要性を強調。日本も共感」★4 http://lavender.5ch.net/test/read.cgi/news4plus/1510660601/ 韓国って国家単位で詐欺してるよな。 韓国人なんて詐欺国家の末端構成員だから全く信用ならねえ。 つか、あいつら嘘つき過ぎてて、辻褄とかそういうの考えないのな。 韓国人が優秀なことにするのなら、頭脳流出の心配を一ミリでもしろよアホ共め。 韓国人死ね javascript勉強中の初心者です。 宜しくお願いします。 伝の心という難病患者さんが使用するソフトがあるのですが、 https://www.youtube.com/watch?v=GpcY_UMoiLY& ;t=97s このように、 ボタンを自動で選択して、一定時間後自動で隣の項目に移動し、最後はまたもとのボタンに戻る というコードをどう書いたらいいのか教えていただけませんでしょうか。 自分なりに調べて、setTimeoutなどがあるというのはわかったのですが 何分初心者なのでうまく行きません。 宜しくお願いします。 >>279 そのビデオは入力支援機器で操作してるんだろ >>279 伝の心久しぶりに聞いたな。専門分野だ。 画面のコントロールにID振っておいて、 タイマーのメインループで一つずつ「次のコントロール」を選んでる var current = 0 var max=10 function selNext(){ $('#ctr'+current).focus() current=(current+1) % max } みたいになってる。 障害者の人の操作体系、日本語入力のときの句点の次には割り込みで確定に一度フォーカスするとか、色々小細工があったはず。 TAB順でいいなら、一定時間後にタブ押すとかTabIndexだっけ?を使えば良いかもな ID順にならない移動があるなら ['#a', '#c,' '#d'] みたいに配列に入れておいて その順番での移動を再生するみたいな感じになるだろうな >>279 sleep()は無いけどsetTimeoutを自分で呼べばとりあえずforっぽく書ける https://jsfiddle.net/avp7hjvw/show/ 他にはsetIntervalとgeneratorとの組合せとかも出来るけど、 https://jsfiddle.net/74srLa7L/show/ async/awaitが汎用性が高いのでオススメ 一旦sleep()を自作すればほぼ普通の流れで書ける https://jsfiddle.net/4ntz4fju/show/ >>284 setIntervalが一番近い動き。 このカーソルと言うか選択肢移動は経時で自動的に順番に選択されて、 決定にあたるキー操作のみでユーザーは操作する。瞬目をプルキンエ像から判定とか、マイクロスイッチを辛うじてでも動く部分で押すとか。 >>283 が、決定の差し込みとかダイアログの選択肢への切り替えとか考えるとベストだと思うけど、 確か幾つかの操作体系自体がパナのパテントだから調べないといかんはず。 ブレークポイントでデバッグする方法について教えてください Window.openした後の行でブレークするにはどうすればよいのでしょうか? F12画面を常に表示させても新しいタブやウィンドウが表示させた後では間に合いません。 プルダウンでdefaultのままだった場合に送信ボタンが押せないようにしたいのですがどうすればいいでしょうか? onchangeイベントで切り替えればそれっぽくはなるんじゃね https://jsfiddle.net/znz8vtdc/ >>289 addEventListener使ったほうが良いよ。 https://jsfiddle.net/znz8vtdc/1/ それと使わなくていいならform属性はまだ使いたくないな IEで対応してない ついでにjQueryで書き直したのがこれ https://jsfiddle.net/znz8vtdc/2/ >>289 >>290 ありがとうございます イメージもできたので実装してみます >>287 ありがとうございます。 alertより全然いいですね。 ただ、ソースに手を入れずブレークする方法ないですかね。 ユーザーのシステムから自社システムにリダイレクトして自社システムに入ってくるので、できれば自社システムで解決したいです。 FireGestureやFoxyGesturesのJS記述に関する質問は大丈夫でしょうか。 他に飛んだほうがよければ教えていただけると助かります。 node.jsではプログラム名を記述せずとも node . でプログラムを実行出来ますが、 プログラム名はどう推定しているのでしょうか? package.jsonを見て決めていると思っていたのですが、 package.jsonがなくてもindex.jsを実行しました 答え自分で言ってるじゃん そのくらい雰囲気で感じ取れなきゃダメだよ nodejs index.js で検索するくらいの知能が無いのか? package.jsonがなければindex.jsを実行するようになっているんですね >>296 うすうす分かってはいましたが、確かめたかったのです >>297 ググって自己解決すればそれで終わりですが 質問をすれば、>>298 のように知らなかった人も知ることが出来ますよね? 何のための質問スレだと思ってるんですか? ここは自ら学ぼうとしたけどどうしてもわからない人のための救済スレだよ ググるなんて一番最初にすること >>299 日本語読めないゴミクズは消えろ 二度と来るな >(4) 常に自発的に調べる心構えを持ってください。 > 具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。 > わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。 >>301 役に立たないテンプレに従う必要などありませんよ ただの書かれた文字です 法律でもなければ憲法でもないのです 分かりますね? node.jsにはrequireをしなくても使えるコアモジュールがありますが そういうモジュールのことを何と呼びますか? node.jsに標準添付のモジュールを標準モジュール、 グローバルオブジェクトとして組み込まれているこの種のモジュールのことを コアモジュール、と呼ぶと思っていたのですが コアモジュールは標準添付のモジュールのことでした ではグローバルオブジェクト化されているモジュールの呼び名は? ドキュメントを見ても、それっぽい名前がない気がします どうなのでしょうか? この板には、荒らしが多い 荒らしに構うな。 荒らしと会話するな >>305 ここは質問スレです ゴミというのは質問と回答以外の書き込みをする者のことです 分かりますね? >>304 ないのですか? 「グローバルオブジェクト化されたコアモジュール」 とでも呼ぶしかないのでしょうか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる