javascript 库如何实现,例如Prototype , 决定何时编写一个接受一系列参数的函数或只接受一个巨大的对象?以下是两者的示例。每种方法的优缺点都得到了很好的平衡,所以我不知道何时使用一种方法或另一种方法。
对象
new Ajax.Request(
'server.php', {
onSuccess: function() {
console.info('I succeeded');
},
onFailure: function() {
console.info('I failed');
}
);
优点:对象中参数的顺序无关紧要。当您忘记参数的顺序时,您不必检查函数定义。此外,当其他人阅读对该函数的调用时,他们会更好地了解您在做什么。想象一下,如果 Ajax 调用是这样的:
new Ajax.Request(
'server.php',
function() {
console.info('mystery function');
},
function() {
console.info('is this success or failure?');
}
);
缺点: 函数头没有清楚地显示需要传入的内容。您必须及时更新评论。
// unclear what options need to be passed in without comments
Ajax = {
Request: function(url, options) {
}
};
// a little clearer
Ajax = {
Request: function(url, successCallback, failureCallback) {
}
};
正常
new PeriodicalExecuter(
function(myself) {
console.info('I am running');
},
1
);
优点:函数定义不需要注释,让人可以快速掌握参数是什么。
缺点参数的顺序很重要。更难指定默认值:
// dirty
PeriodicalExecuter = function(callback, period) {
if (typeof(callback) === 'undefined') {
callback = Prototype.emptyFunction;
}
if (typeof(period) === 'undefined') {
period = 1;
}
};
// clean
PeriodicalExecuter = function(options) {
var myOptions = {callback: Prototype.emptyFunction, period: 1};
Object.extend(myOptions, options);
};
最佳答案
当有许多“可选”参数时,我倾向于更容易地找到对象。也就是说,如果您只想覆盖,比如说,从众多可覆盖的选项中选择 2 个,那么对象是最好的,恕我直言。 (jQuery 的 .ajax
函数就是一个很好的例子)。如果您只处理 1-3 个选项,参数似乎很有意义,因为它明确了哪些参数可以做什么。 (例如,JavaScript 内置的 replace 函数)
没有什么比尝试解析一个参数列表测试哪个参数匹配哪个功能更烦人的了(哎呀,参数 3 是一个函数,它们必须意味着这是回调参数,而不是默认颜色参数,例如)
关于javascript - 为什么要传递包裹在对象中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083739/