我正在尝试创建自己的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
} });
thx;)
答案 0 :(得分: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
对象集成。
答案 1 :(得分:3)
只需拥有jQuery.noop
这些设置的默认值,然后您就可以知道使用apply()
或类似功能将该设置的值作为函数调用是安全的。
e.g。
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);
}