🅰️
AngularJSの$broadcastはどのように引数を$onに渡しているのか
@armorik83です。毎日AngularJSをモリモリ書いてます。
broadcastから onへの引数渡し
AngularJSでは、最近は専ら$broadcast
#と$on
しか使っていません。この辺についてはまた後日書く予定にしています。その$broadcast
、どういう風に値を渡しているのか気になったので、念のため調べてみました。
ここです。1.3.14時点のソースを読んでいきます。
var listenerArgs = concat([event], arguments, 1),
listeners, i, length;
L1231のconcat
はAngularJS側の独自のUtilityのようで、実装はここです。$broadcast()
の第1引数はname
なので、arguments, 1
で第2引数以降のすべてと[event]
を結合しています。このあとL1248で、
listeners[i].apply(null, listenerArgs);
しています。listeners[i]
は$on()
内で発火しますが、その時の引数が$broadcast
内で事前に束縛されるというわけです。
参照渡しでした
argumentsをapplyしているだけなので、なんの変わったこともしていません。ご安心ください!
以上です。
Discussion