javascriptでインターフェイスと実装を分けて書く

今までcallメソッドって使ったことなかったけど、
applyとcallの使い方を丁寧に説明してみる - あと味
を見てなるほどな、と思ったので、
これでインターフェイスと実装を分けて書けるかなと思ったので書いてみた。

//インターフェイス
var Fuga = function(){
  var li = [];
  for(var i in this){
     li.push(i);
  }
  return li;
};
Fuga.prototype = {
  sum:function(a,b){},
  setVar:function(g){},
  pon:function(){},
};

//実装
var Hoge = function(bn){
  var m =0;
  for(var i in this){
     if(typeof this[i] == 'function'){
       m++;
     }
  }
  if(bn.length !== m){
    console.log('undefined ['+bn[bn.length-1]+'] method!');
  }
};
Hoge.prototype = {
  sum:function(a,b){
    console.log(a+b);
  },
  setVar:function(g){
    console.log(g);
 }
};

var f = new Fuga();
var h = new Hoge(f);

h.sum.call(f.sum,'oh!','hatudesu');
h.setVar.call(f.setVar,'test');

全然役に立つ気がしない!
なんなんだこれは。
とりあえずcallメソッドの使い方がわかったのでよかった。