推广两个与两个属性成反比的函数

时间:2016-05-06 03:01:39

标签: javascript angularjs

我有这两个功能,我觉得必须有一个优雅的功能方式来概括它们。

$scope.togglePick = function(){
  let targetPhoto = $scope.photoImport.data[indexService.current];
    targetPhoto.pick = !targetPhoto.pick;
    if(targetPhoto.reject && targetPhoto.pick) {
      targetPhoto.reject = false;
    }
}

$scope.toggleReject = function() {
  let targetPhoto = $scope.photoImport.data[indexService.current];
    targetPhoto.reject = !targetPhoto.reject;
    if (targetPhoto.reject && targetPhoto.pick) {
      targetPhoto.pick = false;
    }
}

我想我可以传递字符串参数togglePick = toggle('pick', 'reject')并在[]函数中使用toggle表示法,但这感觉就像魔术字符串......即使它们具有属性名字,我不确定。我也可以:

function toggle(magicFlag){
  let primary = magicFlag ? 'pick' : 'reject';
  let secondary = magicFlag ? 'reject' : 'pick';
  ...
  targetPhoto[primary] = !targetPhoto[primary];
  ...
}

再次,ick,魔术旗。除了每个函数中的longhand之外,还有更优雅的方法吗?

1 个答案:

答案 0 :(得分:1)

这些函数中的代码量和细微差别使它们变得很好。如果没有处理属性字符串怪异,我就不会看到你如何真正制作这个通用的而保持可读性。有时可以不使用最通用的代码。必须在某处绘制沙子中的那条线。