2015-10-05 3 views
0

Как объединить эти две функции?Как слить эти две аналогичные функции js?

$("#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); 
    } 
}); 
+1

Что вы подразумеваете под слиянием? Что вы пытаетесь достичь? –

+0

Я имею в виду, как объединить эти две подобные функции в одну функцию. – tracywwr

+0

Это * есть * одна функция: 'droppable'. Вы вызываете то же самое с аналогичными параметрами в двух разных операторах. Во-первых, почему бы просто не вызвать функцию дважды? Можете ли вы использовать классы вместо ids? Если вы использовали классы вместо ids, вы могли бы вызвать функцию один раз. –

ответ

2

Эти оба утверждения. Существует только одна функция: droppable. Эти два оператора дважды вызывают функцию droppable, каждый раз с разными параметрами.

Если вы спрашиваете это, «Есть ли способ, чтобы написать два statments как одно утверждение? Конечно. Например,

$("#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"); 
+0

Мне любопытно, почему chartAt? –

+1

l и f в id – Tschallacka

Смежные вопросы