func.call(obj)
をobj::func()
と書けるシンタックスシュガーです。
::obj.func
と書くとobj.func.bind(obj)
となる構文もありますが今回は不要なのでスルーします
ここでは例として引数の文字列を2倍して返す関数twoを作ります
function two(str){
return str+str;
}
呼び出し
two('x');//'xx'
この程度なら特に問題はありません。
しかし、文字列加工の処理などで以下のような事になってしまう事ありますよね?
z(y(x(str)));
まず括弧の対応が分かりにくいです。
そして関数はx→y→zの順に呼び出されるのに、見た目はz→y→xと逆になってしまいます。
名前の衝突などの危険があるので使いたくない。
function two(){
return this+this;
}
呼び出し
"x"::two();
この構文なら綺麗に書けます。
名前衝突の心配もありません。
さっきのz(y(x(str)))
もstr::x()::y()::z()
と書けます。
babelが必要です。
あとstage-0なので仕様が変わるかも