2011-11-09 4 views
2

JQueryメソッドのようなすべての要素に対してメソッドとして動作する関数を作成します。例:はすべての要素のメソッドとして機能します

function myFunction(p1,p2){ 
    //things 
} 
element.myFunction(p1,p2); 

Object.prototypeは許可されていないと思います。 私はjavascriptのOOPに新しいです。 myFunctionelement.prototypeにあったとelement.myFunction(p1, p2)を介して呼び出された場合、THX

+0

任意の引数を指定して関数を使用しますか?あなたが意味することはあまり明確ではありません。 –

+0

'Object.prototype'に関数を追加することはできますし、期待どおりに動作するという意味で「許可」されていますが、ほとんどの(ほぼすべての)JavaScriptプログラマがこれをverbotenとして扱う多くの問題につながる可能性があります。しかし、*あなたが「_all_(標準でホストではない)オブジェクトにメソッドを追加する」方法です。しかし、オブジェクトを識別するためのメソッドを追加しようとしているのか、実際に_all_オブジェクトにメソッドを追加しようとしていますか? (後者をする理由はあまりありません) –

+0

いいえ!混乱している場合は編集します –

答えて

1

あなたはこのような何かを行うことができます。

$ = function (element){ 
    return { 
     myFunction: function (p1,p2){ 
      alert(element.id + " " + (p1 + p2)); 
      //do stuff with element and p1 and p2 
     } 
    } 
} 

$(document.getElementById("test")).myFunction(50,80) 

は、これはそれでその機能を持つオブジェクトを返します。新しいパラメータを渡すことができるうちに、それを与えた要素への参照を保持するために語彙スコープを使用します。myFunction

これは実際の動作のjsfiddleです! http://jsfiddle.net/vnbQU/

+1

この方法でラッパーを使用するのは問題ありませんが、一度大きくなるとパフォーマンスが低下します。 jQueryは毎回大きなjQueryオブジェクトを作成する必要があるため、要素に渡されるプレーンな関数呼び出しには対応しません。プロトタイプの継承が回避するように設計されているのは、パフォーマンスヒットのタイプです。 – RobG

3
myFunction.call(element, p1, p2); 

は次のように、elementにバインドthismyFunction(p1, p2)を呼び出します。

+0

はい、それは私がやろうとしていることです。私は引数を減らすことができるかどうかを調べています。 –

+1

これは抽象化のレイヤーを追加するので、実際には時間の無駄です。直接?誰にでも書くことができるコードは少なくてすみます。 – RobG

+0

はい私は同意しますが、それはもっと必要なものです:D –

関連する問題