2011-09-09 5 views
3

私はこれを動作させようとしています。

$.fn.createDelegate = function(scope){ 
var fn = this; 
    return function() { 
     return fn.apply(scope, arguments); 
    } 
} 

以下のバージョンは機能しますが、私は両方が同じだと思いました。第1の方法は、第2の方法を書く簡略な方法です。 または、私は考えを間違っているかもしれません。

Function.prototype.createDelegate = function(scope){ 
var fn = this; 
    return function() { 

     return fn.apply(scope, arguments); 
    } 
} 

私はこのような最初の呼び出し: VARデリゲート= this.myMethod.createDelegate(この); setTimeout(デリゲート、3000);

機能ではありません。 Function.prototypeを使用した2番目のメソッドが機能します。誰かが理由を説明し、私をまっすぐにすることはできますか

また、これを小さなプラグインとして持っていると、大規模なプロジェクトで上書きされることはありません。

+1

'$ .fn'はjQueryのプロトタイプではなく、すべての関数のプロトタイプです:

あなたはこのような何かをするだろう。 'this.myMethod'とは何ですか? – jmar777

答えて

3

$.fnに割り当てると、jQueryオブジェクトの機能が得られます。 jQueryは意図的にネイティブオブジェクトのプロトタイプに触れません(2番目の例のように)。そのコードのスタイルが魅力的であれば、Prototypeをご覧ください。

+0

したがって、プロトタイプチェーンを有効にするには、Function.prototypeを使用する必要があります。これは$ .fnを意味し、Jquery.myFunctionはドーム要素またはjqueryオブジェクトにのみ作用します – Chapsterj

+0

はい、これらはjQueryオブジェクトまたはjQueryコレクションにのみ影響します。 –

3

$.fnは、jQuery.prototypeの省略形であり、jQuery選択肢にメソッドを追加するために使用されます。それはではなく、Function.prototypeの略語です。です。ただし、組み込みのjQuery関数$.proxyを使用して、必要な処理を実行できます。

var delegate = $.proxy(this.myMethod, this); 
var delegate = $.proxy(this, 'myMethod'); // slightly briefer but less explicit syntax 
+0

完全なプロキシはまさに私が後にしているものです。だから上のケースで私はそれを理解する。私はプロキシを使用していないと言いますが、私はまだ私の方法を使いたいと思っています。どのようにすべてのメソッドが使うことができる、このような関数をutilに適用できますか? Jquery.createDelegate()を使用するか、Function.prototypeに固執する必要がありますか? – Chapsterj

+0

@Chapsterj質問を理解できないかどうかわかりません。 – lonesomeday

+0

最初に投稿した例を使用できます。したがって、Jqueryにプロキシがないとしたら、プロキシのように動作するようにメソッドを実装する方法を教えてください。 selector.createDelegate(this)のように – Chapsterj

関連する問題