3

独自の jquery 関数を作成しようとしています。オプションを追加する方法は知っていますが、「onStart」または「onComplete」機能を追加する方法がわかりません。

これは私がこれまでに知っていることです:

jQuery.somefunctionname = function (options) {
var settings = {},
    defaults = {
        'someoption': 'somevalue',
        'someoption2': 'somevalue2',
        'someoption3': 'somevalue3'
    }
settings = $.extend({}, defaults, options);

    //do something functional
    alert("hey i'm a function");
}

しかし、ユーザーが関数の前 (onStart) と後 (onComplete) に独自のコードを追加できるようにするには、何をコーディングすればよいでしょうか?

ユーザーは次のように書けるはずです:

$.somefunctionname({
   'someoption' : 'a',
   'someoption2' : 'b',
   'someoption3' : 'c',

   'onStart' : function() {
      //whatever user want when my function started
   },
   'onComplete' : function() {
      //whatever user want when my function ended
   } });

どうも ;)

4

2 に答える 2

4

関数内で、次のようなことを行います。

jQuery.somefunctionname = function (options) {
   if (typeof options.onStart === "function")
      options.onStart.call(this);

   // other function code here

   if (typeof options.onComplete === "function")
      options.onComplete();
      // OR
      options.onComplete.call(this);
      // OR
      options.onComplete.apply(this, argsArrayIfDesired);
      // etc.
};

つまり、プロパティがで定義されてoptionsおり、実際には関数である場合は、適切なポイントでそれを呼び出します。this使用する設定、.call()または.apply()必要に応じて設定を指定し、パラメータを含めます。settingsオブジェクトと統合するか、必要に応じて統合しないでください。

于 2012-07-24T06:43:13.853 に答える
3

の設定のデフォルト値を設定するだけでjQuery.noop、その設定の値を関数として呼び出しても安全であることがわかりますapply()

例えば

jQuery.somefunctionname = function (options) {
var settings = {},
    defaults = {
        'someoption': 'somevalue',
        'someoption2': 'somevalue2',
        'someoption3': 'somevalue3',
        'onStart': jQuery.noop,
        'onComplete': jQuery.noop
    }
settings = $.extend({}, defaults, options);

    settings.onStart.apply(this);

    //do something functional
    alert("hey i'm a function");

    settings.onComplete.apply(this);
}
于 2012-07-24T06:40:26.350 に答える