+ 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です) ご回答ありがとうございます
>>492
モナドと言う語をプログラミング周辺で初めて聞きましたが
関数型言語の用語なんですね
>>495
やはりそうですか
引数も変えず、外の変数も変えず、
ただ返り値だけを自由に出来るのが副作用のない関数なのでしょうね
>>493-494
あなたがたは(一人かも知れませんが)何一つ代わり映えのしない不毛な戯言を
ロボットのように延々と繰り返していますが、なんでこのスレにいるんですか? >>492
>>495
お前も迷惑だからそのブスと他スレ立てて出て行け
良い事をしているつもりならそれは完全に勘違いだ
犯罪者に対してエサをやることは反社会行為だ
ちゃんと自覚しろ
そもそもお前らがこのスレに固執する意味はないはずだ
なぜここで迷惑行為を続ける?他スレ立てれば済む話だろ
Web板にも捨てるほどスレはあるし
>>496
死ねよブス ブックマークレットに登録したMutationObserverを使って変更を検知できるようになったのですが、
ページがリロードされるとMutationObserverで登録した処理が
無効になってしまいます。どうすればいいでしょうか。 >>498
ブックマークレットは自動的に実行できないので
ページ開いた時に実行できるブラウザ拡張機能を使用する
例えば、Tampermonkey とかな
ちなみに俺はこれを使って、ページを開いたらすぐに
ダウンロードボタンを押すようにしているw Javascriptで出来てるから不安なら自分で調べれば良い 配列についての質問なのですが、
配列にプロパティを持たせたい場合、
どのように宣言すれば良いでしょうか。
下記のようなことがしたいと考えています。
var cell = new Array(3){
プロパティ1つ目 x;
プロパティ2つ目 y;
};
上記のようなことがしたい場合、
x,yの要素を持つクラスを作成し、
配列でインスタンスを作成するしかないでしょうか?
何か良い方法があれば御指南頂ければと思います。
よろしくお願いします。 あるクラスのインスタンスを、欲しい数だけ作る
それらを、配列(入れ物・コンテナ)に入れる var cell = new Array(3);
としたなら、cellはArrayのインスタンス
>x,yの要素を持つクラスを作成し、
>配列でインスタンスを作成するしかないでしょうか?
この辺の意味が分からんけど、
cell.プロパティ1つ目 = x;
cell.プロパティ2つ目 = y;
としない、またはできない理由は何? よく分からんが、
3x3の2次元配列を用意してcell[x][y]とアクセスできるCellクラスを作りたいってことか? それとも
cell[0]へのアクセサcell.x
cell[1]へのアクセサcell.y
を定義したいということだろうか 質問が悪く、すみません。
アクセスの仕方としては、
cell[0].x = 保管したい値1;
cell[0].y = 保管したい値2;
のような感じです。
オセロの作成を色々手探りでやっているのですが、
cellには画像、x座標、y座標のデータを持たせて、
画像のクリックイベントで格納しておいたx座標y座標を使いたいと考えています。
cellのインデックスには空、白、黒の3つを割り当てたいと考えています。
長々とすみません。 {x,y}の配列が作りたいって事ね
一時はTypedObjectとかあったけど、
まあそれに倣わなくても地道にループで初期化するので良いと思うけどね
どうしても最大限抽象化したいのならProxyArray案もあるけど >cellのインデックスには空、白、黒の3つを割り当てたいと考えています。
これがよくわからん cell[0] = {};
cell[0].x = 保管したい値1;
cell[0].y = 保管したい値2;
cell[0]はObjectクラスのインスタンスとも言えるけど、そこまで深く考えなくてもいいと思う 日本語が不自由ですみません...
やりたかったのは>>510さんのようなことでした。
これで作ってみようと思います。
ありがとうございました。 おいおい、ここまで話を進めたのはいいけど、
最初の初期化であれば普通はこう書くだろ?
var cell = [{x: 値1, y:値2}]; 配列なら複数形のほうがいいかもな
var cells = [{x: 値1, y:値2}]; 普通に、マス目のクラスを作って、メソッドも加える
そのインスタンスを、64個作って、配列に入れておく 他のゲームならコマのオブジェクトを作るほうがいいかもしれんけど
オセロなら8x8のマスのオブジェクトに空・白・黒の状態持たせたほうがいいよねぇ すみません、もしこのスレで
axiosを使っている人がいましたら
伺いたいのですが
activexobject(microsoft.xmlhttp)を呼び出す方法と
もしそれがなければ改造方法の指南を受けたいです。
よろしくお願いします。 なんでaxios?
new ActiveXObject()じゃいかんのか? すみません、
Vueのコンポーネント作成で使いたいと思いました。
昔のIEでローカル配置データの読み込みができたらと考えていました。 ローカルファイルとか、OS のネイティブAPI を使うのなら、Electron。
Electron から、Angular, React, Vue を使う
Electronではじめるアプリ開発
~JavaScript/HTML/CSSでデスクトップアプリを作ろう
野口 将人・倉見 洋輔、2017 分かりにくくて申し訳ないです。
<body onload=“function a();”>
function a(){
sum = new Sum()
}
function Sum(){
...........略
}
3つのカタマリ は別ファイルなのですが、実行するとUncaught ReferenceError:Sum is not difinedと出てしまいます。
不備が分かる方、問題点を教えていただけるととても助かります。
上から順にHTML. script.js script-2jsで
javascriptはscriptタグを2つ並べて参照しました。
<script>〜</script>
<script>〜</script> script.jsとscript-2jsの読む順番をひっくり返せ >>522
順序を入れ替えましたが、ダメでした....... まともに質問できないゴミクズ質問者に見当違いの答えを返すアホ回答者
ゴミクズ質問者のせいで終わったスレ
原因は確実に9文字のアレだな >>524
その9文字を教えていただけると助かります 3つのファイルは同じ場所にあるの?
後aとSumはもういいからhtmlを省略せずに示してくれると分かりやすい ><body onload=“function a();”>
全角文字を使うな。
半角ダブルクォーテーションにする
<body onload="function a();"> >>527
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>gaming</title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
<script src="script-2.js"></script>
<script src="script-3.js"></script>
<script src="script-4.js"></script>
<body onload="initial()">
<h1>javascript game!</h1>
<p>click here to start game</p>
<canvas id="canvas" style="background-color:#eef;" width="800" height="400" onclick="start();">
<audio id="item_get" preload="auto">
<source src="item _get.mp3" type="audio/mp3"></audio>
</body></html>
コピペする時点で、変な処理が加わった可能性もあるのですが、構造はこのようです。 >>529
>>521のa();に当たる部分がinitial();でinitial();に含まれる処理→Sumがdefinedになってしまいます。
どうぞよろしくお願いします >>529
何度も連投で申し訳ないのですが、initial()が含まれるのがscript-4
Sum();が含まれるのがscript-3です >>531
めんどくせーから、やり方教えるから自分でやれ
まずひとつのファイルに書いて動くかどうか確認しろ
動かなかったら動くと思うところまで削って確認しろ
動いたら、ファイルを分けるなどして動かなくなる
ところまで戻していけ
そうすりゃどこに原因が有るかわかる >>532
そうですね、自分でいろいろいじってやってみます! そんなにファイルを分けているなら、CommonJS でも使えば?
Node.js, Electron, Webpack, Babel, jQuery とか オブザーバーの利点が今ひとつ解らない。
カスタムイベント用意して
個別にそのイベントリスナー登録すればすむのに
管理オブジェクトがオブザーバーリスト持ったり
専用の関数を継承したり等
何故態々面倒な事をするのだろうか。 Mediator
中央管制塔のように全体を統轄する
「Observer Mediator」で検索!
自分でやったら、イベントの削除とかが面倒くさい。
削除しなかったら、ずっとメモリを使い続ける(メモリリーク)
イベントを取り付けた要素の、先祖の要素が削除された場合に、
イベントを削除する機会を失うから、メモリリークになる
jQuery では、そういう場合でも、メモリリークにならないから、すごい! もう随分前からNative-JS間の循環参照の問題は解決して
参照が残ってなければ消えるけどな
ネイティブの実装も極めて特定の場合に参照が残っている場合でも消えてしまうんだが
jQueryはそれをより気にせずアグレッシブに消すというだけで良し悪しがある Backbone.js ではメモリリークになるけど、
jQuery ではならない、って聞いた node.jsでのファイルの存在確認には
fsモジュールのaccessメソッドが使われますが、
ファイルがないと例外が投げられます(同期の場合)
この挙動おかしくないですか?
ファイルがあるならtrue、ないならfalseを返せばいいはずです
例外は何かしら例外的な事象を知らせるために投げられるものですが
ファイルの有無を調べるメソッドにおいて、
ファイルがないことは例外的事象でも何でもありません
何でこんなことになってるのでしょうか? 下記のコードについて質問です。
配列内容をシャッフルするコードのようなのですが、
forの動作に疑問を持ったので教えて頂ければと思います。
・,(カンマ)で区切ってある箇所は連続して処理されるという認識で間違いないでしょうか?
・for文が止まる理由は、for文の真ん中の条件式の k; が0になる=false と判断されるということでしょうか?
Array.prototype.shuffle = function() {
for(var j, x, k = this.length; k; j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x);
return this;
};
質問が分かりづらかったらすみません。
よろしくお願いします。 >>540
意味がわからないのは、そのコードの可読性が低いから、
だめだよ。そんな書き方をしたら
普通に書こう。前提として for(ここ; ここ; ここ) の「ここ」の部分は省略できる
まず、一番目の「ここ」は初期化なのだから forの外に移動できる
Array.prototype.shuffle = function() {
var j, x, k = this.length;
for(; k; j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x);
return this;
};
そして、3番目の「ここ」はループの中に入れることができる
Array.prototype.shuffle = function() {
var j, x, k = this.length;
for(; k;) {
j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x
}
return this;
}; あとは整形しよう
Array.prototype.shuffle = function() {
var j, x, k = this.length;
for(; k;) {
j = Math.floor(Math.random() * k);
x = this[--k];
this[k] = this[j];
this[j] = x;
}
return this;
};
そしてforではなくwhile使ったりと普通の書き方に書き直す
Array.prototype.shuffle = function() {
var k = this.length;
while(k) {
var j = Math.floor(Math.random() * k);
k--;
var x = this[k];
this[k] = this[j];
this[j] = x;
}
return this;
}; ES6使った最新の書き方だとこうなるかな
Array.prototype.shuffle = function() {
for (let i = this.length; i > 0; i--) {
const a = i - 1;
const b = Math.floor(Math.random() * i);
[this[a], this[b]] = [this[b], this[a]];
}
return this;
};
console.log([0,1,2,3,4,5,6,7,8,9].shuffle());
そしてlodashにはshuffle関数は用意されてるので何も作る必要はないw
https://lodash.com/docs/4.17.4#shuffle >>541-544
返信ありがとうございます。
Javascriptはライブラリが豊富なんですね。
もっと勉強してライブラリも扱えるように頑張ります。 その実装のは破壊的、lodashのは非破壊的、別もの shuffleだけのためにlodashを使うのは、徒歩30秒の距離で車を使うようなもの 別に誰もそれだけの為に導入しろと言ってる訳ではなかろう loadash使うなら別に>>540のコードの可読性なんて関係ないし
ケツつけ無くてもそのまま使えばいいよね
それともloadashの中身も読めってことかな? 今回は仕事でデバッグするわけじゃないんだから可動性は関係ない
勉強では可読性は時間をかけてほぐせばいいだけ
ただ初心者はアルゴリズムの理解力がないからどのみち他人のコードを読むのは辛いのが当たり前 youtube player api で動画を再生しているdivの画像を取得
(youtube動画のフレーム画像を取得)
する方法はありますか? >>550
アルゴリズムどころか基本的な文法で詰まってるだけじゃん 素人なりに firefox の addon を書いている最中なのですが
それに適した質問スレなどはありますか
このスレが最適でしょうか 今の拡張機能界はChromeベースのがWeb標準になって
Firefox/Edgeもそれとかなりの互換性持ってるから
ここで聞いても答えてくれやすいと思うよ
結構難しいAPIも多いしね そんな機能してないスレを紹介しても仕方がない
ExtensionはいまやW3C仕様なんだしこのスレで扱うべき
https://browserext.github.io/browserext/ イマドキのJavaScriptの書き方2018
https://qiita.com/shibukawa/items/19ab5c381bbb2e09d0d9
これの「辞書・ハッシュ用途はオブジェクトではなくてMapを使う」
っていうところですが、
オブジェクトをハッシュとして使うことのデメリットなんて実際上ないし、
Mapの書き方の方がイケてないと思うのですが、どうなのでしょうか?
特にMapオブジェクト生成時に、キーと値を配列で渡しているのが気になります
そもそもオブジェクトをハッシュとして使うというアイデアからJSONが生まれて
JSONが現在も広く使われているのに、
わざわざMapに書き換えるのってアホくさいと思います
そうですね? >>557
何を質問したいんですか?
ちゃんとまとめてから来てください
分かりますね? >>558
オブジェクトをMapに書き換えるメリットって本当にありますか? オブジェクトではキーと値の一対一の対応が明確なのに
Mapオブジェクトを使う方法ではそこここに配列が介在していて
そのあたりがぼやけています
これはハッシュ専用のオブジェクトを使うというアリバイだけのために
支払うコストとしては多すぎます
そうですね?
>>560
ハーゲ なるほど
それはオブジェクトにはないメリットですね
用途によっては適所がありそうです
ありがとうございました 本当にゴミクズ ドキュメントに書いてある事を指摘されて
「なるほど」
生きている価値がない >>562
ゴミクズは能力最底辺なので、初心者でさえ回答できる質問しか出来ない
したがって簡単に答えられるが
荒らしにエサを与えるな
わかったかね 以後注意するように >>566
相変わらすハゲですね〜
オブジェクトをハッシュとして使ってきた用法に関しては
依然としてオブジェクトの方がいいと思いますよ
ただMapにはMapの使い道がある、と言っているのです
分かりますね? >>566
荒らしにエサを与えると>>567のようにはしゃぎ出す 二度とエサを与えるな >>562
ゴミクズの見分け方は簡単
検索すれば一発でわかる事
一次ドキュメントに書かれている事をまとまりのない長文で聞く
二度とエサを与えるな >>562
ちなみにお前はどんなスレが欲しいんだ?
或いは、自分が何をやっているのか理解しているか?
君の回答よりもMDNの方が詳しく正確に書いてある。
つまりこのブスはMDNすら読んでいないことが確定的に分かっている。
その上で、回答をするのなら、今後ともMDNすら読んでいない奴が質問を繰り返すことになる。
それが君の望むスレなのか?
或いは、君はゴキブリ韓国人と同様、日本人が集まる場所を破壊するのが目的なのか?
MDNすら読め無い馬鹿が集うスレが欲しいのなら、君らがそれを新たに作るのは自由だ。
ただ、ここはそうじゃない。
最低限ググってから質問しろという、2chではごく当たり前のスレだ。
それを無理に乗っ取って回答を続けることは、背乗りゴキブリ韓国人と同レベルだと理解できてるか?
もっと長期的視点で考えろ。 var key = 'a';
// var key = '__proto__';
var obj = {};
obj[key] = obj[key] ? obj[key] + 1 : 1;
文書に出現する、単語の数を数える場合、
その単語が未登録なら1、すでに登録されているなら、1増やす
こういう場合に、たまたま、__proto__ という単語を登録しようとするとバグル。
obj.__proto__ を上書きするから
var wordsMap : Map<String, Int> = new Map();
wordsMap["a"] = 1;
trace(wordsMap["a"]);
上は、Haxe のMap のコードだが、ES4 変換後のコードでは、
wordsMap["$" + key]
のように、キーの前に、$ 文字を連結している
他にも、
var obj = {x : {}};
のように、オブジェクト内のオブジェクトを使う事もできるが、
この方法でも、__proto__ ではバグル つまり、キーとしてそういうものが入らないと
断定できるならば問題ない
キーとなるものはコードに書かれている文字のみで
ユーザーが入力したテキストを入れるとかない限り
心配する必要はないということさ Object.prototypeの問題は
obj={__proto__:null}
obj=Object.create()
で解決するから別にそこがオブジェクトリテラルと比べて
殊更取り上げる程のMapの特徴と言うわけでもない Object.create(null)もいいが、Mapの利点はforEachで定義順で列挙可能とか、iterableなオブジェクトを生成しやすいとか、あたりじゃないかね 全部一次ドキュメントに*日本語でも*記述されてる事だね
ゴミクズ質問者とそれに集るゴミクズ回答者 JSに一次ドキュメントはない
コメントほぼ無しの仕様書と二次三次ドキュメントだけ ゴミクズ回答者はWeb標準のドキュメントがMDNに統合される事(既に統合は進んでいる)を知らないようだ
ゴミクズ回答者にとっては、時間と金をかけて必死で積み上げた取って置きの知識だろうけど
今は無料で即時に入手出来るんだよ
Mapの利点を長々と解説してたが、三平方の定理を発見した古代人がドヤ顔で解説してるようで滑稽だったよ 初歩的な質問失礼。
ある非同期関数があるとき、それをwrapして同期版を作るうまい方法ってないですかね?
fs.open()を使ってfs.openSync()を作るようなイメージ。 promise
generator runner は、promise と組み合わせて、非同期処理を同期的に書ける。
つまり例外処理を使える(同じコンテキスト)
co, Koa を使う generator runner
非同期のpromise をラップして、同期処理にしたもの
同期f(){
yield 非同期のpromise;
}
yield で、promise が満たされるまで止まる >>586
回答ありがとうございます。
けどこれyieldで止まります?同期f()はgeneratorですよね?
単にnext()でPromiseが返るだけのような。 yield 非同期のpromise;
yield で、promise が満たされるまで止まるように、iterator, generator を作ると、
ES2017 の、async/await と同じになる
それが、co, Koa なんだろう >>580
それは二次ドキュメントが統合されるってことだよ
ってか、君は何なん?ゴミクズに野次を飛ばして楽しむ傍聴人?
ドキュメントがあるで済むなら言語質問スレなんていらんがな >>589
やっぱりなにか勘違いしてる。
async/await使ったってfs.openSync()のような同期処理は無理でしょ。 >>590
ドキュメントにそのまま載っている内容を質問する馬鹿は死ねでいいでしょ
ググれないブスも死ねでいい >>592
気持ちは分かるが、説明書を読むのと、人から教えられるのではやっぱ感触が違うからな
ROMってる奴のほうが多いと思うし、その人の為、もしくは例え既知であってももう一度それに付いて考えてみる機会ができたという点で為になってると思うよ >>593
ならねーよ。死ねよ。
考える機会が欲しいのなら、自分でMDNを定期的に読み返せば済む。
自己完結できない奴は上達しないし、そもそもプログラマに向いてない。
小学1年生の教科書を毎年読み返しても、お前みたいな小学1年生レベルの馬鹿から進歩できないだろ。
JavaScriptのスレはマジで酷いぞ。少しは他スレも読んでみるといい。
当然他スレにも初心者は沸いているわけでね。
何故JavaScriptだけこんなに酷いのかは、俺にはいまだによく分からんが。
568のqiita、20年やっててこの程度しか書けないのか?と思うよ。
JavaScripterは、文法にだけやたらこだわっていて、プログラマとしては全く上達してない。 >>594
そんなことないと思うよ
これを機にMapについてより深く知った人も多いと思うし
自分もこれまでMapをどう使ってきたかなって思い起こす機械になったし
沢山の物があるWeb学習において重要なことは、
機会があった時に深く知ることを繰り返すことだと思うよ
基礎を完璧に抑えて応用を学んだ行くというのは不可能
だから時々基礎に立ち返る価値はいつになってもあるし、
例えMDNが90点で、ここの情報が2,30点の集まりだったとしても、
色んな人の色んな角度から情報を理解するってことも重要
JSもだし、Webっていうのは皆で作っていくものだからね
言葉の定義や何が良いことかっていうのも、
その瞬間に世界のJSerやWebデベロッパーが何をどう考えているかで変わってくる
だから文法や文脈に拘るっていうのもとても大切なことで
JSerやWebデベロッパーにとってそのすり合わせのための機会っていうのも重要
正解が無く、むしろその自由さが良いこととされている環境だが、だからこそ常に正解を見つけていかないといけない
だから皆が独自に正解を考えるが、実際その環境で何が正解と言えるかというと皆の意見の総和ということになる
だから自分のこだわりを認めてもらおうと、広めようと躍起になって良く揉めるが、それも環境の進化のために必要なこと
その点中央政権があったり、よりプロプライエタリな他言語環境とは雰囲気が違うのは当然 ■ このスレッドは過去ログ倉庫に格納されています