X



+ JavaScript の質問用スレッド vol.130 + [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001Name_Not_Found
垢版 |
2017/07/31(月) 21:10:56.03ID:???
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/
0139Name_Not_Found
垢版 |
2017/09/03(日) 23:26:50.18ID:???
普通に
document.querySelector('#hahaha');
でいいんじゃね
速度が問題になるほどかどうかだけど
0140Name_Not_Found
垢版 |
2017/09/03(日) 23:40:07.88ID:???
idひとつしかつけちゃいけないって言っても、つけたから何かエラーが起きるわけでもないし普通に2つ以上についてることもある
querySelectorでp#hahahaでいいんじゃない
0141Name_Not_Found
垢版 |
2017/09/03(日) 23:45:11.25ID:buG2OJDC
関数の有無をチェックし、その関数を実行するということをやりたいのですが、
fCheckだけなら以下で済みますが

if ( typeof fCheck == "function") {
fCheck();
}

fCheckの部分を変数に入れるなどして使いまわしたい場合は、どのように書けば良いでしょうか?
0142Name_Not_Found
垢版 |
2017/09/04(月) 00:22:22.40ID:???
>>141
そのコードの場合、fCheckに関数以外が入っている(つまりバグ)の場合に
スルーされてしまうので良くない。

if (fCheck) {
fCheck();
}
の方が良い

さらにいうなら
fCheck && fCheck();
でもよい

また予め fCheck = fCheck || function() {} などとしておけば、

fCheck(); とするだけでよくなる
0143Name_Not_Found
垢版 |
2017/09/04(月) 00:40:24.38ID:???
>>140
それはhtmlをまず直せって話だな
javascriptってあたりよそのhtmlいじるわけじゃないんでしょうし
0144Name_Not_Found
垢版 |
2017/09/04(月) 00:46:58.27ID:G+KHmFrZ
>142
なんと・・・
勉強してきます、ありがとうございました
0145Name_Not_Found
垢版 |
2017/09/04(月) 03:06:18.93ID:???
>>140

idは一意の値であるべき。
重複してたらバグと考え、エラーにならないなら重複しても良いのではという浅い考えは捨て去るべし。
idとclassの存在意義を理解しろ。
0146Name_Not_Found
垢版 |
2017/09/04(月) 06:30:16.46ID:???
>>145>>143
いやもうすでに重複して使ってるサイトは山ほどあるんだから
そんなこと言ったってどうしようもないじゃないか
0147Name_Not_Found
垢版 |
2017/09/04(月) 08:00:15.59ID:???
id重複は DOM 的には最初の id 以外は無視され、 CSS 的には詳細度の高い class みたいなもの

自動的に validator を通すようにしとけば id重複は自然となくなる
0149Name_Not_Found
垢版 |
2017/09/04(月) 09:51:22.30ID:???
フォームはnameで区別するのだから
idは基本的に使う必要はない。
0150Name_Not_Found
垢版 |
2017/09/04(月) 10:21:56.73ID:???
>>136,146
他サイトで重複idがあることは、自サイトで重複idを使うことの理由にはならない
「重複して使ってるサイトは山ほどある」(採用例が多い)も観測範囲によって変わってくる主観的なものだし、仮に信頼できる統計で採用例が多かったとしても、「使ってよい」かの判断は別
文法違反なんだから
https://momdo.github.io/html/dom.html#global-attributes

自分の管轄外のサイトにJavaScriptを適用するのであればどうしようもないが、そういう前提条件があるのなら質問の冒頭に付け加えるべきだし、<p id="hahaha">, <div id="hahaha"> のどちらが先に存在するのかによって変わってくる
<p id="hahaha"> が初めに来ることが保証されているのなら、getElementById
id="hahaha" が出現する順番がランダム or <p id="hahaha"> が2番目以降に出現し、<p id="hahaha"> を特定したいのならば、document.querySelectorAll('p[id="hahaha"]').forEach()
0151150
垢版 |
2017/09/04(月) 10:25:33.47ID:???
一応、付け加えておくと、ここはWeb制作板だから、何の前提もなければ、回答者は自サイトのコードを書くものと判断する
従って、「id は一意の値であるべき」の回答は正しい
0152Name_Not_Found
垢版 |
2017/09/04(月) 10:38:52.49ID:???
>>136はスレ間違えたのか?
礼も返事もないし、HTMLスレにでも行ったんじゃないか?
0153Name_Not_Found
垢版 |
2017/09/04(月) 11:15:02.61ID:???
ローカルルールでIDの乱用はいかんよ
振り込め詐欺かよw
0154Name_Not_Found
垢版 |
2017/09/04(月) 12:09:34.89ID:???
うちの社内のコーディング規約ではcssのためのidは使用禁止にしてる
idはjsのために空けとくこと
cssでidって使わなくてもclassで問題ないしね
レンダリング時の速度も変わらないし
jsではid指定とclass指定では速度が全然違うからid使うようにしてる
だから同一idが複数使われることがないな
もし使うやつがいたらこの仕事やめろってぐらい異常
0155146
垢版 |
2017/09/04(月) 16:32:48.26ID:???
まあ確かに、わざわざ重複させる必要性は分からないけど
おそらくjqueryが一般化されて第二のクラスみたいに使う人が増えたんだろうな
0156Name_Not_Found
垢版 |
2017/09/04(月) 16:43:28.94ID:???
重複して使ってるサイトなんて本当にあるのか?
繰り返しで同じパーツ吐き出す場合に
ひな形にid入れてたりするとそうなるのかもしれないけど
それはテンプレート作ったやつがアフォーだっただけやで
0157Name_Not_Found
垢版 |
2017/09/04(月) 18:17:49.63ID:???
他人のサイトなんてグリモンスクリプトとか作ってんきゃあんまり関係ない話だけど
youtubeとかアホみたいに重複してるよ
0158Name_Not_Found
垢版 |
2017/09/04(月) 18:33:21.17ID:???
関数内にその関数いれたら無限ループにできる?
0159Name_Not_Found
垢版 |
2017/09/04(月) 18:46:54.44ID:G+KHmFrZ
出来る
ちなみにそれは再帰関数という名称がある
0161Name_Not_Found
垢版 |
2017/09/04(月) 20:35:34.29ID:???
>>155
なんでそこでjQueryがでてくるのかわからんのだけど?
jQueryのセレクタは条件が揃えばquerySelectorAllを使うわけで
重複したIDの挙動はDOM APIと同じだよ
0162Name_Not_Found
垢版 |
2017/09/04(月) 20:38:47.95ID:???
>>157
何しれーっと嘘ついてるの?
idの数が多いから嘘がバレないと思った?
0163Name_Not_Found
垢版 |
2017/09/04(月) 20:43:49.71ID:???
googleがvalidなhtml書いた試しなんてないじゃん
プログラム上の利便性優先でルールなんてお構いなしでなんでも使う
検索エンジン握ってるだけあってどんな糞みたいなHTMLでも最上位に来るし
SEOなんて考慮する必要がないからやりたい放題
0164Name_Not_Found
垢版 |
2017/09/04(月) 20:45:02.14ID:???
>>154
俺の場合、JavaScriptからでも極力IDは使用しないようにしている。

なぜならコンポーネントという考えでDOMを扱ってるから。
通常コンポーネントは複数存在する。だからIDではなくクラスを使用しなければいけない。
大抵の処理はこのコンポーネントの中で閉じてしまうのでIDの出番がない。

コンポーネント化した要素同士をつなぐときにはIDでいいっちゃいいんだけど、
IDでやっちゃうとコンポーネント間が密結合になってしまう。
だからイベント等を使って関節的に通信するようにする。
そうするとIDを使ってつなぐ必要は殆ど無くなる。

速度に関して言えば、classが遅くても今のブラウザは高速で
実用上問題が発生したこともないので考えるだけ無駄だと思ってる
もしclassを使って遅くなるとしたら1ページ内のタグが多すぎ

IDを使ったほうが良いと思える場所は、ページの区別だな。
bodyにidを振る。だからページ内でユニークになるのではなくサイト内でユニークになる。
何のためかというと、特定のページだけに特殊なcssやjavascriptを割り当てたい時。
通常はコンポーネント化するから必要なのだが、まあ極稀に想定外の自体で
特定のページだけ緊急に修正しなければいけないとかで便利なのよ
0165Name_Not_Found
垢版 |
2017/09/04(月) 20:49:57.02ID:???
id 2文字
name 4文字
class 5文字

これ結構重要
0166Name_Not_Found
垢版 |
2017/09/04(月) 20:54:56.43ID:???
>>162
今見たけど52個ぐらい使われてるIDあった
YouTubeの内容はブラウザとかによって変わるかも
0167Name_Not_Found
垢版 |
2017/09/04(月) 20:58:55.38ID:G+KHmFrZ
>>165
ねーよw
idを使ったせいで保守が100倍大変になる事はよくある
絶対にclassがいい

IDを使うのはページ内アンカー用のみ
0168Name_Not_Found
垢版 |
2017/09/04(月) 21:02:10.48ID:???
>>164
リンクアンカーにはどうしても必要にならないか?
0169Name_Not_Found
垢版 |
2017/09/04(月) 21:08:19.80ID:???
>>168
> リンクアンカーにはどうしても必要にならないか?

なるけど、それJavaScriptのためのIDじゃないよね?
0170Name_Not_Found
垢版 |
2017/09/04(月) 21:16:25.55ID:???
そうだなあ
そもそもJS使うのにIDを多用するようになったのって
クエリセレクタが使えるようになる以前に
人にJSを説明するようなコードが無駄に煩雑にならんように
getElementByIdを多用してたからみたいな側面あるし
0171Name_Not_Found
垢版 |
2017/09/04(月) 23:05:23.08ID:???
>>161
そうなのか、まあ勝手な推測だからな
0172Name_Not_Found
垢版 |
2017/09/04(月) 23:19:03.66ID:???
>idを使ったせいで保守が100倍大変になる事はよくある
>絶対にclassがいい

idを使うようなケースをclassに置き換えたところで
それは一意なclass名を持つclassになるだけであって
むしろ5文字になる分保守は面倒になるだけだろ
0173Name_Not_Found
垢版 |
2017/09/04(月) 23:27:18.14ID:???
>>172
逆じゃね?
idで済むものをclassに置き換えるのは楽だけど
classで出来る重複はidでは不可能なので大変、つー話では?
0174Name_Not_Found
垢版 |
2017/09/04(月) 23:35:28.01ID:???
>idで済むものをclassに置き換えるのは楽だけど
より制約が強いのはidのほうであって
idで済むという表現はおかしい
idじゃないと出来ないからidにしてると考えるべき
0175Name_Not_Found
垢版 |
2017/09/04(月) 23:39:58.89ID:???
>>174
それはそうだろうけど
そういう話じゃないんじゃない?
0176Name_Not_Found
垢版 |
2017/09/04(月) 23:56:20.41ID:???
ま、htmlの話だし、出来ればなんでもいいってことで、
そろそろ次の話題頼むわ。
0178Name_Not_Found
垢版 |
2017/09/05(火) 00:04:44.93ID:???
漢ならchildNodesとかでどうにかしろ
0180Name_Not_Found
垢版 |
2017/09/05(火) 00:34:36.40ID:Bf/p7I5y
初心者なんですが、皆様に質問です。

スマホサイトでonclikで表示させたサイトを一番後ろで表示させたいのですが、どのように記述
すればよいですか?

今使用しているのは
<script>
function openWin2() {
window.open('http', 'bbb', 'left=50,top=0,width=520,height=650');
window.open('http', 'aaa', 'left=50,top=0,width=520,height=650');
subWindow.blur();
return ture;
}
</script>

foucusを使うといいよ!との助言を前に他のサイトで頂いたのですが、何度やってもうまくいかず。。。
0181Name_Not_Found
垢版 |
2017/09/05(火) 01:59:20.63ID:???
まずは英語の勉強かな
click focus
0182Name_Not_Found
垢版 |
2017/09/05(火) 02:46:11.66ID:???
サイズ書いても意味ないじゃろ
0183Name_Not_Found
垢版 |
2017/09/05(火) 08:37:38.60ID:???
>>180
メインとなるウインドウを開かせると同時にバッグラウンドで広告ウインドウを開かせようという腹か
迷惑スクリプトの類だな
0184Name_Not_Found
垢版 |
2017/09/05(火) 09:49:24.01ID:???
というかwebブラウザで事足りるだろw
0186Name_Not_Found
垢版 |
2017/09/07(木) 11:22:53.26ID:???
ついにmodule importがchromeに実装されたな
主要ブラウザ全ての実装されたら切り替えていっても良いのかね
0187Name_Not_Found
垢版 |
2017/09/07(木) 13:21:32.89ID:???
dynamic importは?
こっちのほうもあくしてくれ
0188Name_Not_Found
垢版 |
2017/09/07(木) 14:32:47.88ID:???
あれdefault exportされたやつ扱うのがクソ面倒なのどうにかなった?
0189Name_Not_Found
垢版 |
2017/09/07(木) 23:46:39.86ID:???
イベントの処理を考えると
JavaScriptも内部に複数のプロセスみたいなものを持っていると思うんですが
JavaScript内部のプロセスみたいなもののことを何と言いますか?
0191Name_Not_Found
垢版 |
2017/09/08(金) 00:14:55.28ID:???
いや、そういうことじゃないんです
OSでいうスレッドやプロセスに相当する
複数の「処理の流れ」をJavaScriptは内部で持ってますよね?
知りたいのはそれの名前です
0194Name_Not_Found
垢版 |
2017/09/08(金) 00:54:37.03ID:???
イベントループでググってみましたが、ちょっと違う感じがします
イベントが発生すると、
それまでの処理は中断されて
適宜イベントリスナが呼び出されたりしますが
知りたいのはそのおのおのの処理の流れの名称です
イベントループというのはイベントを実現するための全体のメカニズムのことですよね
0195Name_Not_Found
垢版 |
2017/09/08(金) 01:00:51.92ID:???
>>194
イベントリスナかな?
Javascriptならイベントハンドラのほうがしっくり来るか。
0196Name_Not_Found
垢版 |
2017/09/08(金) 01:52:05.41ID:???
JS 言語としてのスレッド的なものは
「promise の実装は実装依存とする」
みたいに定義されていないんじゃないか?
0197Name_Not_Found
垢版 |
2017/09/08(金) 08:18:40.01ID:???
>>189,191
そもそも、イベントはマルチスレッドではないのだが
JavaScript実装は様々な仕様の集合体であり、用語は各々の仕様書の中で完結する
つまり、全仕様に通用する用語はない
0199Name_Not_Found
垢版 |
2017/09/08(金) 08:37:42.25ID:???
> 複数のプロセス それまでの処理は中断されて
前提の部分から間違ってるので、思ってるものが見つからないのは当然
0200Name_Not_Found
垢版 |
2017/09/08(金) 09:00:44.81ID:???
>>194
イベントはアプリケーションに依存するタスク通信の確立
それに対してイベントハンドラでサブルーチンを処理する
0201Name_Not_Found
垢版 |
2017/09/08(金) 09:07:35.56ID:aUEnqurz
javascriptが有効の場合のみ表示するには
1行ずつdocument.write('');で囲ってやる以外に方法はないんですか?
無効の場合は<noscript></noscript>でまとめて囲えるので簡単だけど
0203Name_Not_Found
垢版 |
2017/09/09(土) 05:13:20.91ID:???
document.write() を使うと、<HTML> 部分が、一択すべて削除されてから、
JavaScript でページが作られるから、

普通、document.write() を使わない
0204Name_Not_Found
垢版 |
2017/09/09(土) 05:19:10.51ID:???
このhonya1だけをいじりたいのですが、何か方法ありませんか?
jqueryセレクターで色々やったんですが出来ませんでした

<div>
honya1
<p>honya2</p>
</div>
0205204
垢版 |
2017/09/09(土) 05:23:46.33ID:???
こんな感じだったりもします

<div>
honya1
<p>honya2</p>
honya3
<p>honya4</p>
</div>
0206Name_Not_Found
垢版 |
2017/09/09(土) 05:45:05.40ID:???
>javascriptが有効の場合のみ表示する
で、なんでdocument.writeだけと思ったのかは謎だが
出力処理それしか知らんかったってことか?
innerHTMLでも使っときゃいいんじゃね
0207Name_Not_Found
垢版 |
2017/09/09(土) 08:08:08.11ID:iPGueJu4
>>203>>206
ほとんどの参考書は出力はdocument.writeで教えているけど
0208Name_Not_Found
垢版 |
2017/09/09(土) 09:33:51.55ID:???
>>203
タイミングによるだろ
使わないのは確かだが
0209Name_Not_Found
垢版 |
2017/09/09(土) 12:04:45.08ID:???
>>201
> javascriptが有効の場合のみ表示するには
> 1行ずつdocument.write('');で囲ってやる以外に方法はないんですか?

そういう時によく使われているのが
https://modernizr.com/

表示・非表示というのは見た目の問題なのでCSSでやるのが鉄則

どういう仕組かは俺が説明するよりも
modernizrを調べてもらったほうが早い

JavaScriptが有効な場合だけじゃなくて
いろんなものが有効な場合か?が判定できる。
0210Name_Not_Found
垢版 |
2017/09/09(土) 12:28:27.29ID:iPGueJu4
>>209
でも例えばセレクトフォームで1を選択した場合に入力フォームを表示
それ以外は非表示っていうような条件付きの表示にしたい場合
cssだと対処できないんだよな
0211Name_Not_Found
垢版 |
2017/09/09(土) 12:49:34.42ID:???
>>210
できるよ?

「セレクトフォーム+入力フォーム」というコンポーネントが有るんでしょ?
セレクトフォームで1を選択した時に、そのコンポーネントの状態を
変えればいいだけだよ。

JavaScriptでやるのは状態(classやdata-*)の設定だけ
見た目はCSSで制御する
0212Name_Not_Found
垢版 |
2017/09/10(日) 09:06:38.41ID:???
promiseに関する疑問です
thenメソッドに、promiseオブジェクトを返す関数を渡すと、
thenを更に後ろに書いてメソッドチェーンに出来ますが
その関数が実行されるのは前の処理が終わったタイミングのはずですよね?
thenメソッドがメソッドチェーンで実行されるのは
promiseオブジェクトが生成されるより前のはずなのに、
何でメソッドチェーンに出来るのでしょうか?
0213Name_Not_Found
垢版 |
2017/09/10(日) 09:17:14.39ID:???
実際に即実行されるのはthenで、thenがpromiseを返しているからだよ
thenに渡した関数はpromiseが解決するまで保持される
0214Name_Not_Found
垢版 |
2017/09/10(日) 09:18:15.17ID:???
>>212
then()が実行されるのは、「コールバック関数を呼び出した時」だから
0215214
垢版 |
2017/09/10(日) 09:20:20.69ID:???
正確ではなかったな
「then()に渡された関数が実行されるのは、Promise内のコールバック関数が呼び出した時だから」
0216Name_Not_Found
垢版 |
2017/09/11(月) 01:17:54.54ID:???
>>213
thenに渡した関数がpromiseを生成して返さなければいけないと思っていたのですが
そうじゃないんですね
でもthenメソッドがpromiseを生成するにしても
promiseはコンストラクタ内で非同期処理をすぐに実行するので
生成された時点で非同期処理が走ってしまうような気がします
内部動作が謎です・・

>>215
いや、それは分かってるつもりです・・
0218Name_Not_Found
垢版 |
2017/09/11(月) 05:41:39.06ID:???
Promiseコンストラクタやthenメソッドの振る舞いが、プロミスの本質を示してると考えるからそうなる
それらの関数はたまたまそういう振る舞いになっているだけであって、
もっと言えば便利で都合のいいように置かれているだけであって、

それらはプロミスの概念を為すための必然な設計ではないし、
Promiseコンストラクタがこういう挙動をするから、thenがどうこうだとか、プロミスってこういうものと言えるものではない

PromiseコンストラクタはPromiseコンストラクタの挙動をして便利にプロミスを作り、
プロミスからはthenメソッドがthenメソッドの挙動をして便利にプロミスを作るというだけのこと
そこを難しく考える必要は全くない
0219Name_Not_Found
垢版 |
2017/09/11(月) 07:06:26.05ID:???
>>216
それが分かっているなら、「then()が呼び出された時」と「コールバック関数が呼び出された時」が同じではないことも分かると思うのだが
0220204
垢版 |
2017/09/11(月) 13:31:07.78ID:???
>>217
見たのですが、それはただの$(ele).text()と$(ele).html()の紹介なので
教えてもらって恐縮ですが求めているものとは違うようです

改めて>>204-205分かる方いたらお願いします
0221Name_Not_Found
垢版 |
2017/09/11(月) 13:47:51.67ID:???
>>220
$("<div>honya1<p>honya2</p></div>").contents().get(0).textContent = "honya3";
0222Name_Not_Found
垢版 |
2017/09/11(月) 13:52:58.01ID:???
childNodes使えばいんじゃね
0223Name_Not_Found
垢版 |
2017/09/11(月) 13:55:28.06ID:???
あ、jQueryならcontents()でもいいか
0224Name_Not_Found
垢版 |
2017/09/11(月) 14:09:31.64ID:???
>>220
$('div').contents()[0].replaceWith('ここを変更');
0225Name_Not_Found
垢版 |
2017/09/11(月) 14:11:00.34ID:???
idなりclassなりつけとけよ
htmlが不変ならいいけど
CMSとかでget0)とかで取るのはバグの原因
0226Name_Not_Found
垢版 |
2017/09/11(月) 15:57:36.80ID:???
>>221>>224
contents() まさにこれです!
ドンピシャです、contents() 凄い便利
長年悩んで来たことだったんで目から鱗です
ありがとうございました
0227Name_Not_Found
垢版 |
2017/09/11(月) 16:31:45.59ID:???
ほんと低レベルやな
せっかく助言があるのにね
0228Name_Not_Found
垢版 |
2017/09/11(月) 16:35:26.89ID:???
ええんやで
君も大概低いんやから
0229Name_Not_Found
垢版 |
2017/09/11(月) 17:52:06.06ID:???
同じプリミティブ型の値が与えられたら同じオブジェクトを返すようなことは可能?
typeof(MyObject(5)) === "object" と MyObject(5) === MyObject(5) のどちらもtrueになって欲しい
オブジェクトを一時的に保存しておくのは無しで
0230Name_Not_Found
垢版 |
2017/09/11(月) 18:24:25.17ID:???
保存しちゃダメならインスタンスが同一にならないから無理じゃね?
0232Name_Not_Found
垢版 |
2017/09/11(月) 19:24:43.63ID:???
>>229
そういうことをしたいがためにFlyweightパターンがある訳だが実装を制限するなら知らん
0233229
垢版 |
2017/09/11(月) 19:59:32.50ID:???
ユーザー名とデータを紐付けた上でWeakMapでキャッシュさせたかったのですが自前で実装することにします
ありがとうございました
0234Name_Not_Found
垢版 |
2017/09/11(月) 20:16:55.03ID:???
>>233
>>229で言ってるオブジェクトをWeakMapのキーにしたいのか?
だったらやめとけ
保存しない(変数に入れて持つこともしない)なら無理だ
それにWeakMap自体サポートしてるブラウザ少ないし、仕様固まってないからサポートしてても変更されるかもしれん
そんなもの使ったらトラブルのもとだぞ
0235Name_Not_Found
垢版 |
2017/09/11(月) 21:45:00.03ID:???
>>229
これってImmutable.jsでできんじゃないかな。
0236Name_Not_Found
垢版 |
2017/09/11(月) 22:18:46.09ID:???
いや、Immutableは内部で保持してる
>>229は「一時的に保存しておくのは無し」ってことなので保持しちゃダメ
なので不可能
0237Name_Not_Found
垢版 |
2017/09/11(月) 22:51:39.99ID:???
>>229
無理なんだが、その要件でなぜObject型が欲しいのかが謎
プリミティブ型とリファレンス型の違いを覚えた後に、設計から考え直した方がいい
0238216
垢版 |
2017/09/11(月) 23:06:23.39ID:???
https://jser.info/post/77696682011/es6-promises/
>then の返り値(*1)に対してもthen (next-then)で処理を追加することができる。
>next-then に設定されたコールバックは
>*1の値がsettles (succeeds/fails)になった時に呼ばれる

と言うことなので、
thenが生成するpromiseのコンストラクタには
thenに渡したonFulfilledとonRejectedをラップした関数が渡される
その関数は、親promiseのsettledな状態変化をコールバックで受け取ってから、
親promiseの変化に状態に即した処理を開始する
という感じでしょうか?
thenが生成するpromiseを、
単純にthenの引数でnewしただけのpromiseと思っていたので、
「???」となっていましたが、もう少し複雑なものなのでしょうね
0239Name_Not_Found
垢版 |
2017/09/12(火) 00:08:07.70ID:???
なんかPromiseで悩んでいるようだな?
話の流れを読まずに語るぞ

まず一番Promiseっぽくない使い方だな

function foo() {
 Promise.resolve(0)
  .then(function(zero) { return 1; })
  .then(function(one) { return 2; })
  .then(function(two) { return 3; })
  .then(function(three) { return 'end'; })
  .catch(function(e) { console.log(e) });
 console.log('start')
}

最初に実行されるのは start の部分だ。
なぜならPromise.resolveっていうのは内部で
setTimeoutを使っている・・・からだと思えばいい。

そして、Promise.resolve(0)をスタートに、
関数が上から順番に実行されていくわけだ。
戻り値は次の関数の引数になるぞ

ここで言いたいのは、上から順番にthenの中身が実行されていくということだけだ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況