トップページ > プログラム > 2015年08月09日 > CwpAUsEP

書き込み順位&時間帯一覧

1 位/142 ID中時間01234567891011121314151617181920212223Total
書き込み数55000000000000000000000010



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net

書き込みレス一覧

【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
308 :デフォルトの名無しさん[sage]:2015/08/09(日) 00:04:09.18 ID:CwpAUsEP
>>305
具体的にどういう場面でアロー関数にapplyを使いたいの?
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
312 :デフォルトの名無しさん[sage]:2015/08/09(日) 00:23:00.73 ID:CwpAUsEP
>>309
いや、可読性+ツールの支援という意味で言ったので、
後者はちょっとやそっとではESでは今もこの先も実現できない
そこの部分は確かな課題だ

可読性と実行時の保証ということであれば、実現可能で
ES7でもプロポーサルが上がってて重要度は高い

あともう一つ要素を挙げるなら最適化による速度の問題か
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
314 :デフォルトの名無しさん[sage]:2015/08/09(日) 00:27:28.48 ID:CwpAUsEP
>>311
なんとなくは分かったが
アローの仕様に前向きに言うのであれば
JSにおいてプライベートメモリリークのない書き方はWeakMapを使わないと無理だったりもするし
もっと良い他の書き方が可能だとは思う

ただチョチョイと書きたいときには確かに欲しくなるだろう
mixinも同じ問題と、より良いんじゃないかという書き方があるという話は>>298
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
316 :デフォルトの名無しさん[sage]:2015/08/09(日) 00:43:02.83 ID:CwpAUsEP
>>315
リークさせる(Mapのようなもので実装する)か、プライベートにしないかの2択しかない。
前者でWeakMapを使うと解決する
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
317 :デフォルトの名無しさん[sage]:2015/08/09(日) 00:45:09.28 ID:CwpAUsEP
語弊が無いよう付け加えると関数だけなら可能だけど、
ステートを共有させることはできない
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
321 :デフォルトの名無しさん[sage]:2015/08/09(日) 01:11:35.81 ID:CwpAUsEP
例えばプライベートなstateという値をインスタンスに付与したくて、
そのクラスにstateを返すgetStateというメソッドを付けることを考えてみて


class C {
constructor(state) { this.state = state }
getState() { return this.state }
}
じゃプライベートにならない、かと言って

C = () => {
var _state
return class {
constructor(state) { _state = state }
getState() { return _state }
}
}()
じゃ全てのインスタンスで同じ値になってしまうので
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
322 :デフォルトの名無しさん[sage]:2015/08/09(日) 01:12:06.42 ID:CwpAUsEP
_ = () => {
var wm = new WeakMap
return inst => wm.get(inst) || wm.set(inst, {}).get(inst)
}()

C = () => {
return class {
constructor(state) { _(this).state = state }
getState() { return _(this).state }
}
}()
のようにすることになる

>>fat-arrow
thisがbindされる等と仕様が誤解されがちな機能だね
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
323 :デフォルトの名無しさん[sage]:2015/08/09(日) 01:18:03.37 ID:CwpAUsEP
>>320
最適化というのは
privete等もそうだがこういうのを上手く仕様に入れられれば
コンパイラが仮定に使える情報が増えるので保護や冗長性が少なく
オーバーヘッドのより少ないマシン語を吐くことが出来る
勿論そのために入れるというわけではないが
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
326 :デフォルトの名無しさん[sage]:2015/08/09(日) 01:34:05.55 ID:CwpAUsEP
>>324
下手に汎用性を持たせてコードをケチったからそうなってしまった
実際は_の実装ごと中に入れるか、new Private()のようにできるようにする

それと>>301で書いているように
ある意味で他の通常の変数と同じようにbindされるようにもなったとも言えるが、
普通thisバインドというとfn.bindやES7bind構文がそうであるように
関数の[[BoundThis]]にオブジェクトがセットされて、文字通り関数に拘束されている場合を指す
それと比較すると、アロー関数は束縛されてるという見かたより、thisが透過しているという見方もできる

いずれにせよthisがバインドされてるという言い方はしない
【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】©2ch.net
327 :デフォルトの名無しさん[sage]:2015/08/09(日) 01:36:09.65 ID:CwpAUsEP
まあアレだな、「this」を具体的な対象とみるか、キーワードの"this"として話すかの差だな


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。