换句话说,我应该什么时候写这个?
_.insertUp = (arr, obj, newObj) => {
return arr.splice(arr.indexOf(obj), 0, newObj)
}
_.insertDown = (arr, obj, newObj) => {
return arr.splice(arr.indexOf(obj) + 1, 0, newObj)
}
_.insertUpDeep = (arr, obj, newObj) => {
const found = _.findDeep(arr, obj)
if (found) _.insertUp(found, obj, newObj)
return arr
}
_.insertDownDeep = (arr, obj, newObj) => {
const found = _.findDeep(arr, obj)
if (found) _.insertDown(found, obj, newObj)
return arr
}
我应该什么时候写这个?
_.insert = (pos, arr, obj, newObj) => {
if (pos === 'up') return arr.splice(arr.indexOf(obj), 0, newObj)
if (pos === 'down') return arr.splice(arr.indexOf(obj) + 1, 0, newObj)
}
_.insertDown = (arr, obj, newObj) => {
return arr.splice(arr.indexOf(obj) + 1, 0, newObj)
}
_.insertUpDeep = (arr, obj, newObj) => {
const found = _.findDeep(arr, obj)
if (found) _.insert('up', found, obj, newObj)
return arr
}
_.insertDownDeep = (arr, obj, newObj) => {
const found = _.findDeep(arr, obj)
if (found) _.insert('down', found, obj, newObj)
return arr
}
(我认为像jQuery这样的库倾向于使用第一个示例?例如append
和prepend
。)
答案 0 :(得分:1)
它是为了让自己保持灵活性,同时保持代码的有序性和功能的小巧性和可读性。 第一个例子就是这样,它遵循编写函数的指导做一件事,所以即使你需要第二个例子中的函数,它应该是这样的:
_.insertUp = (arr, obj, newObj) => {
return arr.splice(arr.indexOf(obj), 0, newObj)
}
_.insertDown = (arr, obj, newObj) => {
return arr.splice(arr.indexOf(obj) + 1, 0, newObj)
_.insert = (pos, arr, obj, newObj) => {
if (pos === 'up') return insertUp(arr, obj, newObj)
if (pos === 'down') return insertDown (arr, obj, newObj)
}
答案 1 :(得分:1)
我认为考虑函数如何出现在使用它们的代码中是很重要的。如果你有insertUp(...)
它有意义,并且不正确地调用函数并不容易。
当你有insert('up'...)
时,你会引入一种“up”的魔法参数。当你查看那段代码时,你不得不想知道其他值是可以接受的。你可以猜测“下降”可能是可以接受的。 “左”或“右”是否可接受?怎么样'UP'?如果传递函数不喜欢的值会发生什么?谁知道。当您查看调用函数的代码时,代码更难理解。