JavaScript Gardenを介してブラウズしていましたが、「高速なアンバインドラッパー」を作成するために使用されるFunction.call.applyハックを見つけました。それは言う:JavaScriptでFunction.call.applyを使用する目的は何ですか?
もう一つのトリックは、呼び出しと適用の両方を使用して高速のバインドされていないラッパーを作成することです。 Function.applyで十分だろうというときFunction.call.applyを使用して、なぜわざわざ
function Foo() {} Foo.prototype.method = function(a, b, c) { console.log(this, a, b, c); }; // Create an unbound version of "method" // It takes the parameters: this, arg1, arg2...argN Foo.method = function() { // Result: Foo.prototype.method.call(this, arg1, arg2... argN) Function.call.apply(Foo.prototype.method, arguments); };
は、私が理解していないことです。結局のところ、両方とも意味的に同等です。
私は[JavaScript Garden](http://javascriptgarden.info/)へのリンクを投稿しました。投稿を含むセクションに直接ジャンプしたい場合は、[ここ](http://javascriptgarden.info/#function.arguments)をクリックしてください。 –
tnx - これは、このハックがいくつかのスピードを上げることを暗示しているようですが、本当に、ちょうど**それを使用しないでください**。 – c69
@Aadit 'Function.call.apply'と' Function。'関数'コンストラクタを適用しようとしている間、前者は 'Function.call'を適用するので、ここでは同じであることはできません。私の答えの詳細は、Ivo Wetzelがこれに答えるために来たのであれば、はるかに雄弁で分かりやすいだろう。これはかなり深いものです。私は同僚が費やすことを望んでいない限り、おそらくあなたが使うべきものではないことに同意します。分かりません。 :) –