4

jQuery メソッドや他のライブラリのメソッドに連鎖できるメソッドを定義するにはどうすればよいですか?

だから、私は次のコードを持っているとしましょう:

var Calculator = function(start) {
var that = this;

this.add = function(x) {
    start = start + x;
    return that;
};

this.multiply = function(x) {
    start = start * x;
    return that;
};

次に、必要に応じてメソッドを Calculator オブジェクトにチェーンできます。

new Calculator(0)
    .add(1)
    .multiply(2)

しかし、次のように jQuery オブジェクトの上に「my_method」という名前のメソッドをチェーンしたい場合はどうなるでしょうか。

$(document).append("<p></p>").my_function();
$(document).my_function();

そのような関数をどのように定義しますか? my_function「オブジェクト」クラスに追加しようとしましたが、これはオブジェクト配列には適用されません:

Object.my_function = function() {
     alert(this); 
     return this;
};
4

1 に答える 1

3

jQuery では、プロパティを に追加してオブジェクトを拡張できますjQuery.fn

そう:

$.fn.my_function = function() {
    …
};

を使用して、jQuery のオブジェクト プロトタイプを複数のプロパティで拡張することもできますjQuery.fn.extend

他のライブラリについては、さまざまです。それらのオブジェクトに共通のコンストラクターがある場合、通常、メソッドをプロトタイプに配置できますが、これは偶然にもあなたのObject例の問題です。Object.prototypeメソッドをルックアップチェーンの一部にするためには、メソッドを配置する必要があります。

たとえば、独自の例を次のように書き直すことができます (実際には、「通常の」「クラス」に適しています)。

function Calculator(start) {
    this.start = start;
}

Calculator.prototype.add = function(x) {
    this.start += x;
    return this;
};

Calculator.prototype.multiply = function(x) {
    this.start *= x;
    return this;
};
于 2013-09-28T23:20:50.010 に答える