のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,432,527人
昨日:no data人
今日:
最近の注目
人気の最安値情報

元スレ+ JavaScript の質問用スレッド vol.133 +

JavaScript覧 / PC版 /
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

201 = :

>>192
なしだろこんなの
意味不明

202 = :


/nox/remoteimages/b1/0e/8c70c09096dc71be8925155c9e5f.png

203 = :

他人がどういうコード書こうと批判する気は無いけど

>だとしたら関数にstatic変数を持たせるのに都合がいいですが

これはちょっとわからない

208 = :

>sratic変数は外のスコープから参照可能だが

typoは無視するとして、>>192もそうだがprivateとごっちゃになっている気がする
staticはstatic

209 = :

妄想に論理性を求めるのは無駄というもの

210 = :

ふぅ、こんなピリピリした話をしてるなら
いつものようにjQueryの話題で盛り上がっていたほうが良いな

211 = :

俺はSPAの実際のところが気になる

できるかどうか、難易、フレームワーク云々、以前にSPA必須な案件にまったく遭遇しない

212 = :

普通のサイトがSPA取り入れても
違和感が出るだけだしな。

クリックしたらページが変わるだろう所で変わらないから
違う、そうじゃないって思っちゃう

213 = :

そんなもんトランジションアニメーションさせればいいだけの話。
アドレスバーのurlも自由自在よ。

214 = :

そこまでしてSPAにこだわるメリットがない

215 = :

>>192
あたまよさそうだねきみ
後学のためにどういう風に使うのか具体的な事例とコードよろしく

216 = :

>>208
そんなわけないでしょう
privateの意味分かってますか?

217 = :

>>215
$(document).on('click', '#hoge', function f(e) {
if (!f.fadeout) {
f.fadeout = _.debounce(() => {
$('#moge').fadeOut();
}, 10000);
}
// いろいろな処理
f.fadeout();
});

こんな感じに、関数の中から同一オブジェクトにアクセスしたい場合に使います
fadeout開始するまでの待ち時間に再び呼び出された時には
前回のfadeout予約がキャンセルされるような関数を、lodashのdebounceで作っています
jqueryのdelayとstopで同じことをしようとしたのですが何故かうまくいかなかったので。
これが唯一の実装方法でないのは当然ですが、複雑さを関数の中だけに閉じ込めるのがシンプルで好みです
もっといい方法ありますか?

218 = :

>>192で言ってることをどこでつかっとんそれ?

219 = :

イベントは、発行/購読パターンが基本

Mediator もある。
仲介者、まとめ役、橋渡し役、管制塔

イベントキャンセルできるイベントキューのライブラリは、
オライリーの著者などの、外人が作っている

自分で作ったら、複雑すぎて大変

Stoyan Stefanov 著
JavaScriptパターン ―優れたアプリケーションのための作法、2011
オブジェクト指向JavaScript、2012

JavaScriptデザインパターン、Addy Osmani, 2013

220 = :

setTimeoutの戻り値を自関数の中で管理するだけで済むように見えるんだが、こういう挙動が欲しいのではないのか?

document.getElementById('mybutton').addEventListener( 'click', function f(){
  var delay = 3000;
  if( ( 'timeoutId' in f ) === false )
    f.timeoutId = false;
  if( f.timeoutId !== false )
    clearTimeout(f.timeoutId);
  f.timeoutId = setTimeout( function(){
    f.timeoutId = false;

    /* my oparation */

  }, delay );
}, false );

目印は別にfalseでなくてもいいが

221 = :

>>218
何を言っているのか分かりません

222 = :

>>221
関数「名」は、予約&予約キャンセルの仕組みには、一切関係ないではないか
ということだと思うが

223 = :

>>220
setTimeoutの返り値でキャンセルするっていうのは当たり前の話です
わざわざ複雑にした処理をドヤ顔で書ける神経が分かりません

224 = :

>>223
目的の挙動はこれで合っているのか間違っているのか、だけが欲しい

225 = :

>>222
いや、だから何????
そんな話誰してないだろ???

226 = :

>>224
いやだから、何でわざわざ無駄に複雑にした処理を検討しなきゃいけないの???
甘えすぎじゃね???

227 = :

>>225
>この関数名は、関数内からしか参照できないのでしょうか?
>だとしたら関数にstatic変数を持たせるのに都合がいいですが、

「関数名」を「参照できる範囲(private性)」について、「だとしたら」で繋いでいるから

228 = :

・・・・これ複雑か?

229 = :

質問スレにはままあることですが
回答者に回るレベルに至っていない連中がちょっと回答者に回りすぎでは?
もう少しわきまえて下さい
分かりましたね?

230 = :

>>226
合っているのだな

231 = :

>>228
ええ、無駄に複雑ですね。無駄に。

232 = :

$('#hoge').on('hoge',(e)=>{
console.log('hoge');
});

$(document).trigger('hoge');

このように上位要素でtriggerしても下位の要素で受け取ることは出来ません
上位で受け取ってコールバックするような機構が必要だと思いますが
どうやるのが定石なのでしょうか?

233 :

>>221
は?
何を言ってるか分からんてアホ?
>>192で言ってることをどこで使ってるか説明してって言ってるだけなんだが?
使ってないってこと?

234 = :

>>229
バカが回答をりかいできなくて逆ギレしだすのも質問スレにはよくある

235 = :

結局>>192をどうつかってるのか分からんだよね

236 = :

>>232
jqueryスレへどうぞ

238 = :

>>235
192はアホすぎて使いようがいない印象をうける
だからこそどうやって使うのかにはかなり興味あるのだがそれは示せないだろう

239 = :

>>232
意味が分からん。

$(document).trigger('click')ってやったら、
HTMLに含まれる全てのボタンやリンクに対して
クリックされたというイベントを発動させたいのか?

240 = :

>>217
たしかにどこが複雑なのかも分からん
我流じゃなくて関数型の勉強したほう良いと思う

241 = :

うっせかす
俺より底辺共が生意気言うなぼけ

242 = :

簡潔で非ライブラリ依存なコードをあっさり提示されてて草

243 = :

>>242
何の話?

244 = :

わからんね。簡素じゃなくて冗長なクソコードなら
>>220にあるけどそれのことかな?w

なにがクソかというと無駄なことしてるから。
clearTimeoutが無効な値を渡しても例外でないのは保証されてるのだから
>>220はこれだけでいい。これがクソコードである根拠
やらなくて良いことをやるのは丁寧なのではなく単に無駄なだけ

document.getElementById('mybutton').addEventListener( 'click', function f(){
  var delay = 3000;
  clearTimeout(f.timeoutId);
  f.timeoutId = setTimeout( function(){
    /* my oparation */
  }, delay );
}, false );

そしてもちろんこれはライブラリを使えば、もっと簡素に実現できる

$('#mybutton').click(_.debounce(function() {
 /* my oparation */
}, 3000));

非ライブラリのコードも簡素に書けないやつが、
ライブラリよりも簡素に書けるとか言わないほうが良い
恥をかくだけだぞw

245 = :

>>217
単に_.debounceの使い方が良くない

_.debounce は オリジナルのイベントハンドラを
遅延実行機能付のイベントハンドラに変えるもの
と考えたほうが良い

そこに書いたコードは、これだけでいい

$(document).on('click', '#hoge', _.debounce(function() {
  $('#moge').fadeOut();
  // いろいろな処理
}, 3000));

jQueryのstopはよく分からんね。俺もアニメーションはあまり使わないので。
俺が言えることは今はCSSを使ったほうが良いということぐらいだろう

stopだけで単体で実行したらキャンセルされるが、stop().delay()みたいに
続けるとキャンセルできないアニメーションのキュー(?)の絡みの仕様なんだろうけど

ドキュメントにも、setTimeoutを置き換えるものじゃないと書いてあるので
http://api.jquery.com/delay/
setTimeoutをそのまま使うか、lodashでラップされた関数を使うほうが良いのだろう

246 = :

やっぱり俺がいないとスレのレベルが下がるなw
jQueryを使ったコードだけでなく、
ネイティブのコードもね

247 = :

>>244
旧泥でclearTimeoutにundefinedを渡すとエラー吐くことがあった気がするが
nullや、あと確かfalseだとエラーを吐かない

LS仕様ではdo nothingと決められていることや
ライブラリではその辺の扱いを別所で定義しているから行数が減ることは間違いない
見て読みやすいコードは無駄ではないことも間違いないとは思うが

248 = :

今ちらっとlodashのgithubを見てきたがdebounce.jsのcancelで以下のように確認を入れてから
cancelTimerでclearTimeoutしているところから見ても、少なくとも無駄ではないと思う
というより、事前確認が無駄ならlodashのこの記述も無駄になるような

if (timerId !== undefined) {
cancelTimer(timerId)
}

249 = :

>>247
そういうことを考慮したとしてもこれだけですむ
冗長なことに変わりはないよ

document.getElementById('mybutton').addEventListener( 'click', function f(){
  var delay = 3000;
  if (f.timeoutId) clearTimeout(f.timeoutId);
  f.timeoutId = setTimeout( function(){
    f.timeoutId = undefined;
    /* my oparation */
  }, delay );
}, false );

250 = :

>>249
clearTimeoutに渡す内容の確認はクソコードかつ無駄ではなく必要なものだったと
認めたということで良いかな

初期化は好み次第だと思うけどね
javascriptではプロパティは事前定義しなくてもいいというのは正直どうかと思うところがある


←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について