То, что я сделал
Я вызываю функцию в значении объекта.
И эта функция будет вызываться в каждом объекте столько, сколько пользователи добавляют absent
данные.
Что я хочу сделать
Следовательно, я понимаю, что у меня могут быть тысячи сотен новых объектов, я бы предпочел минимизировать / исключить дублирование, чем писать функция каждый раз.
Объясните, для чего нужен код
Имя функции, которое я хотел бы автоматически установить, - datesBetween()
.
datesBetween()
может выбрать режим, и у него есть параметры.
Режим ссылается на значение из ключа reason
, который находится в том же объекте. Значение arr[0].absent[0].datesBetween
должно быть datesBetween('leave')('2020-1-1','2020-1-4')
.
Параметры совпадают. Первый параметр должен ссылаться на ключ объекта start
, который находится в том же объекте, второй параметр должен ссылаться на ключ объекта end
.
Некоторые идеи
- Думаю, здесь можно использовать
class
, но я боюсь путаться с функциями. если класс поможет, скажите, пожалуйста. - Я пишу
this
ты, я не уверен насчет this
. Может ли использование this
быть решением в этом коде? var arr = [
{
name : "A",
absent :[
{
reason : "leave",
start : '2020-1-1',
end : '2020-1-4',
datesBetween : datesBetween('leave')(this.start, this.end)
}, {
reason : "sleeOver",
start : '2020-1-25',
end : '2020-1-26',
datesBetween : datesBetween('sleeOver')(this.start, this.end)
}
]
}, {
name : "B",
absent :[
{
reason : "weekendExcursion",
start : '2020-1-18',
end : '2020-1-19',
datesBetween : datesBetween('weekendExcursion')(this.start, this.end)
}
]
}
]
function autoAbsentSetter(){
//do I need class to use inheritance/property things?
}
function addAbsent(mode){
var funcs = {
'leave' : function absent_leave(name, absentName, absentStart, absentEnd){ //all kinds of leave are included. Detail further.
//some codes
},
'sleepOver' : function absent_sleepOver(name, absentName, absentStart, absentEnd){
//some codes
},
'weekdayExcursion' : function absent_weekdayExcursion(name, absentName, absentStart, absentEnd){
//some codes
},
'weekendExcursion' : function absent_weekendExcursion(name, absentName, absentStart, absentEnd){
//some codes
}
}
return funcs[mode];
}