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 回答