2012-03-22 9 views
3

、jQuery.proxy機能の使用状況:jQuery.proxyの3番目のパラメータは何のために使われていますか? jQueryのAPIドキュメントで

jQuery.proxy(function, context) 


機能コンテキスト変更されます機能。
コンテキスト関数のコンテキスト(this)を設定するオブジェクト。

jQuery.proxy(context, name) 


コンテキスト機能のコンテキストを設定すべきオブジェクト。
コンテキストが変更される関数の名前(コンテキストオブジェクトのプロパティである必要があります)。

proxy : function(fn, proxy, thisObject){ 
    if (arguments.length === 2) { 
     if (typeof proxy === "string") { 
     thisObject = fn; 
     fn = thisObject[proxy]; 
     proxy = undefined; 
    } else if (proxy && !jQuery.isFunction(proxy)) { 
     thisObject = proxy; 
     proxy = undefined; 
    } 
} 
    if (!proxy && fn) { 
    proxy = function() { 
    return fn.apply(thisObject || this, arguments); 
    }; 
} 
// So proxy can be declared as an argument 
return proxy; 
} 

しかし、私は機能プロキシの、jQueryのソースコードに見たとき。 3つのパラメータが宣言されています。

だから私は、第三のparamの使用は何だろう、コードを理解することはできません:(

私は機能をテストするためのコードセグメントを記述します。

var someObj = { somefnc : function() {} }; 
function fnc() { 
    this.somefnc(); 
    console.log(arguments); 
} 
var proxyedFnc = jQuery.proxy(fnc, undefined, someObj, "arg1","arg2"); 
proxyedFnc(); 
//output: [] 

と引数が渡されていなかった私はなぜだろうFNCに..以下

答えて

0

は、ソースがjqueryの - 1.7.2.jsから来ている、あなたがソースとAPIドキュメント間の同じバージョンを確認するか?

// Bind a function to a context, optionally partially applying any 
// arguments. 
proxy: function(fn, context) { 
    if (typeof context === "string") { 
     var tmp = fn[ context ]; 
     context = fn; 
     fn = tmp; 
    } 

    // Quick check to determine if target is callable, in the spec 
    // this throws a TypeError, but we will just return undefined. 
    if (!jQuery.isFunction(fn)) { 
     return undefined; 
    } 

    // Simulated bind 
    var args = slice.call(arguments, 2), 
     proxy = function() { 
      return fn.apply(context, args.concat(slice.call(arguments))); 
     }; 

    // Set the guid of unique handler to the same of original handler, so it can be removed 
    proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; 

    return proxy; 
}, 
+0

マイコードはjQuery 1.5.1に由来します。しかし、私はAPI doc – ThemeZ

+0

@ThemeZで後で変更を見つけることはできません。あなたはAPIではなくソースコードについて尋ねているので、これはあまり関係ありません。 – David

+0

@Davidあなたは正しいと思いますが、私は以前のAPI文書をどこで見つけることができるのだろうかと思っています。 – ThemeZ

6

xdazzが正しい、最新の1.7.2バージョンもf.ex、複数の追加の引数がapplyにconcatedとプロキシ機能に渡すことを可能にするさまざまな構文を持っている:

​var fn = function() { 
    console.log(this.foo, arguments); 
}; 

var obj = { 
    foo: 'bar' 
}; 

$.proxy(fn, obj, 'one', 'two')(); 

私はALSかもしれない

$.proxy(fn, obj)('one', 'two'); 

を:このコードを実行すると、あなたが実行しても同じ結果になるだろうbar ["one", "two"]

を印刷しますoこれは公式のAPIには書かれていないので、さまざまなバージョンのものとは異なることがあります。このコードは1.7.2でテストされています。

+0

1.5で動作するように思われるparams(最後の例を参照)を追加する別の方法を追加しました。2それはあなたが必要なものであればまた:http://jsfiddle.net/dNYKh/ – David

+0

ありがとう。それは – ThemeZ

+1

@ TheThemeZこの答えがあなたの問題を解決した場合、おそらく最高の答えとしてそれを受け入れる必要があります。 – David

関連する問題