+ JavaScript の質問用スレッド vol.129 + [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
JavaScript を自ら学ぶ人のための質問スレッドです。 >>2-6 のテンプレを読んだ上で質問してください。次スレは>>950 が>>2 のテンプレ案(本スレで改善案があれば考慮)を元に立ててください ■規則/推奨ルール ・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止) ・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。 ・質問テンプレートの利用推奨。 ・質問への「答え」だけでなく「意見」を出しても良い。 ■禁止行為 ・丸投げ質問 ・迷惑スクリプトの質問 ・オレオレ用語の使用(一般的な用語を使用する事) ・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事) ・回答者同士のレスは原則禁止(>>6 を参照) ・ライブラリの話題の投稿(>>6 を参照) ■質問テンプレート 【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4) 【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。 【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用) 【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。 【サンプルコード】現象を再現可能な最小限のコードを書いてください。 1レスに収まらないならコード投稿サイトを利用してください。 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/ ■質問テンプレート 【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4) 【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。 【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用) 【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。 【サンプルコード】現象を再現可能な最小限のコードを書いてください。 1レスに収まらないならコード投稿サイトを利用してください。 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/ ■前スレ + JavaScript の質問用スレッド vol.128 +©2ch.net http://peace.2ch.net/test/read.cgi/hp/1454390682/ ■過去スレ全集 http://www2.atpages.jp/mirror/2ch/javascript/ http://usamimi.info/ ~mirrorhenkan/2ch/javascript/ (閲覧のみ) ■テンプレ案 http://fiddle.jshell.net/fH4cC/174/show/ ■関連スレ CSS・sass・less・stylus 初心者スレッド=15th= http://peace.2ch.net/test/read.cgi/hp/1453131115/ Canvasについて語ろう http://peace.2ch.net/test/read.cgi/hp/1305093769/ JavaScriptで一番有名なDOM用ライブラリであるjQueryのスレです。 jQueryを使うとJavaScript単体では面倒な処理でもほんの数行で実現可能になります。 このスレはjQueryやjQuery UIの使い方やjQueryプラグインの作り方を質問するスレです。 JavaScriptだけだと面倒だけどjQueryでもっと簡単に書けませんか?というのもOKです。 jQueryを使って作る側のスレであって、こんなプラグインありませんか?と 聞くスレではありません。そいうのは自分で探してください。 ろくにサポートもされてなさそうな野良プラグインの使用はおすすめしません。 前スレ jQuery ライブラリ 総合質問所 vol.4 http://peace.2ch.net/test/read.cgi/hp/1400313626/ >>8 ライブラリスレなら前スレのURLを間違えてるよ + JavaScript & jQuery 質問用スレッド vol.5 + [無断転載禁止]©2ch.net http://peace.2ch.net/test/read.cgi/hp/1452081417/ 前スレ>>1000 > LexicalBindingのthis 言い換えても無駄w 一般的な用語で言え thisがよくわからないと言っている人の 疑問の一つがこれなんだよ。 function Klass() { $("#id").on('click', function() { // ここのthisはなに? Klassのインスタンスじゃないの? } } ってことなんだよ。 function Klass() { var event = {} $("#id").on('click', function(event) { // でもこう書くと、eventはKlassのeventじゃないの?って疑問は起きない。 } } 何故かと言うと、Klassのeventはonclickのevent引数で隠されていると知っているから(よほどの初心者でもない限り) thisもそれと同じように考えればいいという話をしている。 function Klass(this) { var event = {} $("#id").on('click', function(this, event) { // こう考えればeventと同じように呼び出し元が渡す変数で、 // thisが何かなんて疑問は起きない。 } } アロー関数には "function” というキーワードは存在しないから、 先に行った、"全てのfunction" にはthisが存在する。という 定義には当てはまらない。(ドヤァw) function Klass(this) { var event = {} $("#id").on('click', (event) => { // この場合でもthisが何かなんて疑問は起きない。 }); } newの説明もつけ加えるならば、クラスもfunctionなのだから thisという引数がある。 function Klass(this) {・・・} このKlassを、Klass()と呼び出せば、ドットがないので Klassのthisはグローバルオブジェクトのwindow。 obj.klass = Klass などして、obj.Klass() と呼び出せばthisはobj。 ここまでは一緒。 今まで出てきてないnewの話を「追加」するならば、 new Klass() と実行すると、Klassのインスタンスになるってだけだよ。 ルールをまとめると、ある関数を呼び出す時 ・ドットの左側がある・・・this引数にドットの左側のオブジェクトが入る ・ドットの左側がない・・・this引数にグローバルオブジェクト(window)が入る ・callやapplyを使っている・・・ドットの左側と無関係に、callやapplyの第一引数がthis引数に入る。 ・newを使っている・・・インスタンスオブジェクトが作ら、そのオブジェクトが入る。 "全てのfunction" には thisという引数がある。と言った通り補完してみればわかるだろう。 呼び出し元側は脳内で補完してくれ。ドットの前がthis、ただしcallとapplyを使えばそれをすげ替えられる。 function appendFunction (this, fn1, fn2) { return function (this) { fn1.call(this); fn2.call(this); }; } var a = 0; var obj = { a: 10, hoge: function(this){ this.a++; } } obj.hoge(); console.log(obj.a); console.log(a); obj.hoge = appendFunction( obj.hoge, function (this) { console.log(1); }); obj.hoge(); console.log(obj.a); console.log(a); thisの話は >>401 - ぐらいに書いた。 一言で言うならば 全ての "function" にはthisという名前の引数があると考えればいい。 return function (this) { fn1.call(this); fn2.call(this); }; つまりこういうことだ。もしこのthisがvalueとかいう名前だとしよう。 return function (value) { fn1.call((value); fn2.call((value); }; valueは何か?と聞かれたら、呼び出し元で渡したもの。と答えるだろう? thisも同じだ。thisは呼び出し元で渡すものだ。だからここだけ見てもわからない。 obj.foo() と呼び出すと、.(ドット)の左側がthisとして渡される。 ドットの左側がなければグローバルオブジェクト(this)だ ただし、ドットの左側がthisになるという挙動は変更することができ、 callやapplyを使うことで、ドットの左側ではなく任意のオブジェクトをthisとして渡すことが出来る。 ここまで理解すればお前の疑問も解けるだろう? JavaScriptで一番有名なDOM用ライブラリであるjQueryのスレです。 jQueryを使うとJavaScript単体では面倒な処理でもほんの数行で実現可能になります。 このスレはjQueryやjQuery UIの使い方やjQueryプラグインの作り方を質問するスレです。 JavaScriptだけだと面倒だけどjQueryでもっと簡単に書けませんか?というのもOKです。 jQueryを使って作る側のスレであって、こんなプラグインありませんか?と 聞くスレではありません。そいうのは自分で探してください。 ろくにサポートもされてなさそうな野良プラグインの使用はおすすめしません。 前スレ jQuery ライブラリ 総合質問所 vol.4 jqueryのバージョンが多すぎてどれを使えばいいか分かりません jQueryでカレンダーのプラグインがほしいです 表示方法としては端っこに小さく表示するということです FullCalendarを導入してみたのですがサイズ変更をしてみると幅が狭くなったのですが縦が少し変になってしまいました(スクロールしないと月末が見れない) 小さなサイズで月末まで一目で見れるプラグインってありますか ■教えていただきたいこと 自サイト内で、別サイトを読み込み、印刷したいのですが、 以下2点以外の方法はありますでしょうか? もしくは、「Tryしたこと1」でAirPrintから印刷できるようにするにはどうしたらよろしいでしょうか? ■Tryしたこと1 自サイトからfancyboxでポップアップを出して、その中に別サイトを読み込んたのですが、 AirPrintから印刷できなかったため、この手法は却下。 ■Tryしたこと2 iframeで別サイトを埋め込む方法を検討したのですが、 埋め込み先のサイト側が、htaccessでX-Frame-Optionsヘッダに DENYやSAMEORIGINを設定していた場合、読み込むことができないため却下。 以上、よろしくお願いいたします。 enchant.jsについての質問です。 「ゼロから始めるenchant.js入門」という本に載っているバーチャルキーパッドを動かすプログラムを作成したのですが、なぜかバーチャルキーパッドが反応しなくて困っています...ソースコードをお手本からコピーしても動きませんでした。どなたか解決方法をお願い致します。 http://jsdo.it/qa/407 [Ex Code Prettify]の使い方について質問です。 http://www.cyokodog.net/blog/ex-code-prettify-doc/ デモエリア、HTML、CSSを表示したいのですが、 CSSを書くと、デモエリア以外にもそれが反映されてしまいます。 たとえばCSSに * {text-decoration: underline;} と書くと、HTML部分やCSS部分など、ページ全体全てに下線がついてしまいます。 CSSに書いたものをデモエリアにのみ反映させることは不可能でしょうか? google map を利用したアプリを趣味で作成しているものです。 google map で現在地は取得できましたが、常にリダイレクトしないと更新されない状態です。 リダイレクトしないで、更新する方法がありましたらどうかご教授願いますでしょうか。 Node.jsを勉強していてふと気になったので、質問しました。 以下のコードはドットインストールにあった、POSTされたデータをpostsという配列に組み込んで表示するというものなのですが、 readableイベント内で、read()を使って、リクエストされたデータをreq.dataに入れるときに、=ではなく+=を使っています。=でもいいのかと思いきや、 =の場合はconsole.log(req.data)の結果がBufferという謎の文字列になってしまいます。 これは一体どういうことなのでしょうか? どなたか解説をお願いいたします。 http://ideone.com/1Tc7fB >>26 本の作者に聞いてください >>29 不可能です >>30 ありません 荒らしにかけちゃすげえ情熱だな 人生もったいないぞ 前スレの話し相手がいなくなって暇なのだろう 寂しがり屋だな 片っ端から乱立したのageてさすがにやりすぎだろ 爆破予告とか猫殺す前に病院行けよ http://fiddle.jshell.net/fH4cC/179/show/light/ で立てようとしてるが、未だに規制で立てらなかった 代行依頼も利用しようとしてるが、ストーカーが別スレにコピペして荒らしだと思われているようで受け入れてもらえない 何とも念入りな荒らしだな... 比較的、平和な>>44 へ追記しておいた + JavaScript の質問用スレッド vol.129 +©2ch.net http://peace.2ch.net/test/read.cgi/hp/1456250334/ ここが一番書き込みの勢いが高いから来たけど本スレはここでいいですか? vue.jsの質問害したいんですがここでいいですか? 最適なスレがございましたら誘導してください。 >>26 2chよりも、jsdo.it 内で、質問すれば? >>33 これら2つは、異なるもの a = x a += x a += x は、a = a + x と同じ意味だから、追加している . . 板違い(?)の上に、話をさえぎってしまいゴメンナサイ!(*_ _)人 でも、この板のユーザーさんにも有意義な告知かと思うのでカキコませてください。 ★ 謝礼は十分いたします ★ アメブロなどのサイト制作ができる方!! アメブロなどを使用してのサイト制作のできる方を早急に求めています! 私はリケジョやPC女子からはほど遠く、サイト作成にはまったく疎いのでとても不自由しています…(> <;) そこで私に代わりサイトを作成してくださる方を求めてこの場をお借りしました。 ■サイトの内容… アダルト系、違法性、その他公序良俗に反するものではありませんのでご安心ください。 ■サイト制作の仕様ベース… アメーバブログで十分です。願わくばwordpressなどのブログ形式のサイトを希望します。 それに準ずるもので使い慣れたものがあれば別のものでも構いません。 ■条件はありません… 技術さえお持ちでしたら、学歴・職歴等は一切問いません。 フリーター、ニート、高齢ニート、コミュニケーション障害をお持ちの方、引きこもりの方、中年失業者、長期無職等、歓迎! ■作業形態… 作業は在宅でやって頂くことになりますので、時間の指定は一切ありません。別のお仕事の傍らに…でもOKです。 ■詳細をお知りになりたい方は… 下記メールアドレスまでご連絡ください。詳しく書いた返信文を差し上げます。 ※真剣な告知です。冷やかしはご遠慮ください。 井 上 inoue1952w★gmail.com 迷惑メール対策のため@部分を★にしてあります。 実際に送信する際には★を@マークに変えてください。 . . 何なの?出会い系サイトに登録して迷惑メール大量受信されたいの? こういう質問はするべきじゃないんでしょうが callとapplyの意味が冗談抜きで理解できません thisを呼び出す?みたいな言葉はなんとなくわかるんですが一体何がどうなるのか全くわかりません で、質問は? ここはあなたのお悩み相談所じゃありませんが >>57 thisに関しては上の方に書いたよ。関数の隠れ引数みたいなものだって。 まあどんな所で使えばいいかわからないんだろうけどね。ぶっちゃけ殆ど使わないよw たとえば、alert()ってあるよね? 正確に言うとwindow.alert() のwindow.alertっていう関数を別の変数に入れて実行しても動く。 var a = window.alert; a(); ← これは動く でもこれは動かない。 document.a = window.alert; document.a(); なぜならaという関数の中では、thisはwindowであることが前提となっているから。 こういうときに強制的に、thisを変更するのがcallとapply document.a.call(window); とすれば動くわけよ。 単純な処理ではこんなことしないのでcallやapplyは使わない。 だけどフレームワークやライブラリみたいなものになると使いたいことがでてくる。 例えばjQuery $("button").on('click', function() { // ここのthisはDOMのbutton要素になる }); こういう仕組みを作りたいと思った時。on関数っていうのは引数のコールバック関数を ライブラリ内の変数の何処かに保存しておきたくなるわけだけど、そのコールバック関数を呼び出す時に コールバック関数のthisをbutton要素にしたい。と思ったとするだろう? そういうときにcallやapplyを使えば、保存した変数がどこであっても、自由にthisを設定できる。 もしcallやapplyが存在しなければ、この仕様を作るためには、 button.dummy = コールバック関数; button.dummy() なんてことをしなければならなくなるわけ。 少し例を変えたほうがいいかな。 window.dummy = window.alert; window.dummy(); ← これは動く document.dummy = window.alert; document.dummy(); ← これは動かない。 なぜならdummy関数の中ではthisはdocumentだから jQueryのコールバック関数の中で、thisをbutton要素にしたいのなら callやapplyがなかったとしたら、 button.dummy = コールバック関数 button.dummy() としなければならない。 button要素にdummy関数なんてものを生やす必要が出てくる。 callやapplyがあるおかげで コールバック関数.call(button) とするだけで良くなる。 犬オブジェクトでは、鳴くことができる。 犬.鳴く でも、猫オブジェクトには、鳴くメソッドがないけど、猫にも鳴かせたいとき、 this に猫オブジェクトを設定して、鳴かせてみよう 猫.鳴く 犬オブジェクトでは、鳴くことができる。 犬.鳴く ワン! でも、猫オブジェクトには、鳴くメソッドがないけど、猫にも鳴かせたいとき、 this に猫オブジェクトを設定して、鳴かせてみよう 猫.鳴く ワン! 鳴く(関数)が一緒なので当然こうなります。 板違い(?)の上に、話をさえぎってしまいゴメンナサイ!(*_ _)人 でも、この板のユーザーさんにも有意義な告知かと思うのでカキコませてください。 ★ 謝礼は十分いたします ★ アメブロなどのサイト制作ができる方!! アメブロなどを使用してのサイト制作のできる方を早急に求めています! 私はリケジョやPC女子からはほど遠く、サイト作成にはまったく疎いのでとても不自由しています…(> <;) そこで私に代わりサイトを作成してくださる方を求めてこの場をお借りしました。 ■サイトの内容… アダルト系、違法性、その他公序良俗に反するものではありませんのでご安心ください。 ■サイト制作の仕様ベース… アメーバブログで十分です。願わくばwordpressなどのブログ形式のサイトを希望します。 それに準ずるもので使い慣れたものがあれば別のものでも構いません。 ■条件はありません… 技術さえお持ちでしたら、学歴・職歴等は一切問いません。 フリーター、ニート、高齢ニート、コミュニケーション障害をお持ちの方、引きこもりの方、中年失業者、長期無職等、歓迎! ■作業形態… 作業は在宅でやって頂くことになりますので、時間の指定は一切ありません。別のお仕事の傍らに…でもOKです。 ■詳細をお知りになりたい方は… 下記メールアドレスまでご連絡ください。詳しく書いた返信文を差し上げます。 ※真剣な告知です。冷やかしはご遠慮ください。 井 上 inoue1952w★gmail.com 迷惑メール対策のため@部分を★にしてあります。 実際に送信する際には★を@マークに変えてください。 下記のソースはランダムに中身を1つ選んで表示するというものです。 これを中身をランダムに被りなく3つ取り出すようにしたいのですがどう書くといいのでしょうか? var msg = new Array(); msg[0] = 'aaaa'; msg[1] = 'bbbb'; msg[2] = 'cccc'; msg[3] = 'dddd'; msg[4] = 'eeee'; msg[5] = 'ffff'; var no = Math.floor(Math.random() * msg.length); document.write(msg[no]); >>65 配列から取り出した要素を消すor取り出した要素を覚えて置いて一致したら再度ランダムに取得する >>65 lodashのsampleSizeを使うと一発で取れる。 https://lodash.com/docs#sampleSize var msg = [ 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', ]; console.log(_.sampleSize(msg, 3)) //例 ["cccc", "dddd", "bbbb"] >>59 >>60 今更だけどありがとう・・・! このレスがきっかけでようやく理解できました >>68 var msg = [ 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', ]; この書き方は初めて知りました。 しかし、肝心の console.log(_.sampleSize(msg, 3)) が上手く表示されませんでした。 すみません。 Cの「関数のポインタ」みたいに var _a = window.alert; _a('test'); は出来るのに var _w = document.write; _w('test'); が出来ないのは何故ですか? >>72 object.method() と実行した時、 methodの中では、thisはobjectだけど、 var _method = object.method; _method() と実行する時、つまり.(ドット)の前がない場合は _methodの中ではthisはグローバルオブジェクト(ブラウザではwindow、nodeではglobal)と 仕様で決められているから。 _a('test) も _w('test') も thisは両方windowになっている。 >>71 lodashっていうライブラリを読み込まないとだめだよ。 https://lodash.com/ ドキュメント見たりググればわかるけど、このコード実行前に、 HTMLの書いたscriptタグでlodash.jsを読み込む必要がある。 >>73 ありがとうございます。 呼ばれた先にthisに依存する参照があるという事ですね。 >>75 そうそう。関数の内部でthisを使ってるかどうかは、中を見ないと分からないが、 呼び出し方によってthisが変わるわけで、中でthisを参照していれば 当然呼び出し方によって、動いたり動かなかったりする。 質問というかJavaScriptの感想を教えてくれ 1.習得に必要な期間 受講生は他のプログラムに触れたことがあり、一日5時間勉強にあてられる 最終目標は簡単なプログラムを何も見ずに作れる程度 2.JavaScriptの利便性 今後も使われることは増える可能性があるか >>77 簡単ってなんだ?テトリスぐらいか? 可能性は無限だからがんばれ JavaScriptは今後毎年仕様が追加されて使いやすくなっていく。 今からでも学ぶ価値があるし、 将来性も高い。 デスクトップアプリも作れるようになってるしね。 慣れたらtypescriptに手を出してもらいたい。 ちょっと追加の言語仕様を学ぶ必要はあるけど、 ライブラリの必要パラメータとかある程度教えてくれるようになるから 周辺ライブラリの学習に役立つ。 prototypeを使ったクラスメソッド定義の際 prototype={}が駄目な理由ってなんですか? というかconstructorの必要性が分かりません 他の言語使えるヤツなら3日で覚えるだろこんなクソ言語 >>82 他の言語の経験が活かせて3日で覚えられるということは、 クソ言語ではないということですよ。 似ているということなんだから。 グローバル変数をローカルで使用する時のみ変更するって事できますか? var hoge['ichi'] =0; function test1(){ hoge.ichi =1 console.log(hoge.ichi); } function test2(){ console.log(hoge.ichi); } test1();;←1になる test2();←0に戻ってる えっ? グローバルからは、アクセス禁止にするっていうこと? 純粋に変数じゃ無理じゃないの? どっちにしても、オブジェクトにしないと行けないと思う >>87 何をいっているかわからないがクロージャーを使うのはどう? function hoge() { var ichi = 0; return [function () { ichi = 1; }, function () { console.log(ichi); }]; } var _a = hoge(), func1 = _a[0], func2 = _a[1]; func1(); //ichi <- 1 func2(); // console.log(1) >>77 です。 お答えいただけて嬉しい限りです。 参考にさせていただきました。 ありがとうございました。 ES2015のクラス定義について聞きたいんですが アロー関数のようにthisを束縛した状態でメソッド定義する方法ご存じないですか? 以下のようにするしかないんですかね?面倒くさいんですが、、、、 class RadioOther{ constructor(props) { this.onRadChange = this.onRadChange.bind(this); } onRadChange() { ... } ... } >>92 何をしたいのか全くわからん。 これでいいだろ。 class RadioOther{ constructor(props) { // 不要 } onRadChange() { ... } ... } >>93 setIntervalとかにメソッドを登録するとthisの指す先が変わってくるので それをなんとかしたいって話です。 >>92 の方法が一番簡単なんですかね。でももっとclass定義の仕方として 良いやり方がないかなと >>92 やろうとしていることがJavaScriptの良いところを殺してしまっている感じ ここは本スレじゃないから>>91 で質問し直した方がいい気がする >>94 クラス関係ないじゃん。 setInterval(this.onRadChange.bind(this), 2000) だろ。 >>94 _this = this で参照を保存しておけば? var Object ={};がありまして このObjectの中にあるプロパティとメソッドの返り値をconsole.log()で表示したいです どうすればいいでしょうか? 言い忘れました このObjectの中にある全てのプロパティとメソッドを です >>86 こういうjsしかできない奴だ本気で引くわ 普通に冗長なクソ言語たぞ >>104 まあまあ、LLにそんな目くじら立てるなよjk 余裕が無いぜぇw for (;;) ソースコードでこういう文があったんですが コレってどういう意味ですか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる