如何合并这两个功能?
$("#f-box").droppable({
accept: "#f-cwrapper > div",
drop: function (event, ui) {
deletecard(ui.draggable);
}
});
$("#l-box").droppable({
accept: "#l-cwrapper > div",
drop: function (event, ui) {
deletecard(ui.draggable);
}
});
答案 0 :(得分:2)
这些都是陈述。只涉及一个功能:droppable
。这两个语句调用droppable
函数两次,每次都使用不同的参数。
如果您要问的是,"有没有办法将这两个声明写成一个声明?当然。例如,
$( "#f-box, #l-box" ).droppable({
accept: function () { return "#" + this.id.charAt(0) + "-cwrapper > div"},
drop: function (event, ui) {
deletecard(ui.draggable);
}
});
但是,对于任何判断代码的度量,该单个语句将比两个语句更糟糕。没有重复,但我认为这段代码更难阅读,更脆弱。我们为计算accept
选择器而引入的函数现在是代码中最复杂的部分。
我认为您的目的是删除重复。这就是"代码气味"这段代码有。您可以做一些事情,但是否这些改进代码将是一个判断调用。
第一个注释是您多次使用匿名函数。您可以命名该函数并以这种方式删除一些重复:
var drop = function (event, ui) {
deletecard(ui.draggable);
};
$("#f-box").droppable({
accept: "#f-cwrapper > div",
drop: drop
});
$("#l-box").droppable({
accept: "#l-cwrapper > div",
drop: drop
});
摆脱重复代码的常见方法之一是名为"提取方法的重构。"您可以创建一个提取函数,其参数是语句之间的差异,然后调用该函数两次:
function createDroppable(droppableSelector, acceptSelector) {
$(droppableSelector).droppable({
accept: acceptSelector,
drop: function (event, ui) {
deletecard(ui.draggable);
}
});
createDroppable("#l-box","#l-cwrapper > div");
createDroppable("#f-box","#f-cwrapper > div");