В JavaScript функции являются первоклассными объектами.Это означает, что вы можете использовать функции так же, как любую другую переменную:
//making an anonymous function, and assigning it to a variable
var meep = function () {
return 'meep';
};
//passing a function as a parameter
[ 'moop' ].map( meep ); //['meep']
//assigning it in an object literal
var weirdNoises = {
'meep' : meep,
'slarg' : function () {
return 'slarg';
}
};
weirdNoises.meep(); //'meep'
weirdNoises.slarg(); //'slarg'
//you can also return functions
function meeper () {
return meep;
}
function slarger () {
return function () {
return 'slarg';
};
}
//meeper returns a function, so the second () means "execute the function
// that was returned"
meeper()(); //'meep'
slarger()(); //'slarg'
Как видите, функции аналогичны любым другим значениям.Таким образом, вы можете определить опцию по умолчанию, которая будет функцией, и переопределить ее, как и все остальное.
$.fn.weirdNoise = function ( options ) {
var defaults = {
makeNoise : function () {
return 'Rabadabadaba';
},
isSilly : true
};
return $.extend( defaults, options );
};
var raba = $( 'foobar' ).weirdNoise().makeNoise();
raba.makeNoise(); //'Rabadabadaba'
raba.isSilly; //true
var shaba = $( 'foobar' ).wierdNoise({
makeNoise : function () {
return 'Shabadabadoo';
}
});
shaba.makeNoise(); //'Shabadabadoo'
shaba.isSilly; //true
Придуманный пример, но я думаю, что он иллюстрирует смысл.