2012-03-09 10 views
2

このコードでは関数式が多すぎますし、簡略化したいと思いますが、わかりません。関数式の数を減らすにはどうすればよいですか?

(function(a, b) { 
    for (a in b = a.prototype)(function(c) { 
     b[a] = function() { 
      c.apply(this, arguments); 
      return this 
     } 
    })(b[a]) 
})(Element); 

http://jsfiddle.net/aap7y/

+3

http://codereview.stackexchange.com/? – j08691

+3

このスニペットには3つの関数式があります。関数の宣言はありません。 –

+0

@ j08691これは、私が持っているコードではなく、私が見直す必要があるので、これはstackexangeに適していると考えました –

答えて

3

関数の構文が使用された回数が同じになりますが、あなたはループから生命維持を除去し、その名前の関数することによって作成された関数の数を減らすことができます。 ..

(function(type) { 

    var proto = type.prototype, 
     fn; 

    function createChainable(proto_func) { 
     return function() { 
      proto_func.apply(this, arguments); 
      return this; 
     }; 
    } 

    for (fn in proto) 
     proto[fn] = createChainable(proto[fn]); 

})(Element); 

このマニュアルの難読化も取り除きました。それの必要はありません。

外部IIFEは、グローバル変数を防ぐためのものです。あなたはそれを取り除くことができるかもしれませんが、あなたは地球の汚染に終わります。

これで問題が解決しない場合は、最初と最後の行を削除し、type.prototypeElement.prototypeに置き換えてください。

+0

外部関数は存在するため、変数をローカルに保ちたい。アイデアは、中間のものを取り除くのが好きです。 –

+0

@williammalo:元のプロトタイプメソッドを保持するには、新しい置換関数で使用できるローカル変数スコープ内の参照を取得する必要があります。変数スコープを作成する唯一の方法は、関数*(または前に削除した 'with'ステートメントを使用)です*。私は内部のものがそこに残ることになるのではないかと心配しています。 –

+0

...それらを削除する意欲は何ですか? –

関連する問題