- 【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"として話すかの差だな
|