结合功能以降低复杂性

时间:2014-01-14 22:18:28

标签: javascript

使这三种功能更有效的最佳方法是什么?他们有共同的逻辑。

function setBoxWidth(type) {
   var boxWidth;

   if (type) {
       boxWidth = 308;
   } else {
       boxWidth = 400;
   }

   return boxWidth;
}

function setAspectWidth(type) {
   var bw;

   if (type) {
       bw = 192;
   } else {
       bw = 100;
   }
   return bw;
}

function setAspectHeight(type) {
   var bh;

   if (type) {
       bh = 47;
   } else {
    bh = 100;
   }
   return bh;
}

我这样访问它们:

function useJcrop(img, type, boxWidth) {
    var aspect,
        bh = setAspectHeight(type),
        bw = setAspectWidth(type),
        bWidth  =setBoxWidth(type);
}

5 个答案:

答案 0 :(得分:1)

使这三个功能更有效的最佳方法是避免编写它们。

function useJcrop(img, type, boxWidth) {
    var aspect,
        bh = type ? 308 : 400,
        bw = type ? 192 : 100,
        bWidth = type ? 47 : 100;
}

答案 1 :(得分:0)

这样的东西?

function useJcrop(img, type, boxWidth) {
    var aspect,
        bh = type ? 308 : 400,
        bw = type ? 192 : 100,
        bWidth  = type ? 47 : 100
}

代码少得多。

我建议你尽可能将这些数字放入描述性变量中。或者以编程方式计算它们。

答案 2 :(得分:0)

function setBoxWidth(type) {
   return type ? 308 : 400;
}

function setAspectWidth(type) {
   return (type) ? 192 : 100;
}

function setAspectHeight(type) {
   return (type) ? 47 : 100;
}

很难比功能更简单。您应该考虑将所有这些信息封装在Object中,但是,因为type基本上是3中的共享状态。

function CroppedImage(type)
{
   this.type=type;

   this.getBoxWidth= function() {
      return type ? 308 : 400;
   }
   /... 
}

答案 3 :(得分:0)

嗯......试试这样的事情?

bh = type ? 47 : 100;
bw = type ? 192 : 100;
bWidth = type ? 308 : 400;

答案 4 :(得分:0)

首先,您的功能命名令人困惑。它们不设置任何内容(局部变量除外),而是返回一个值。因此我会称它们为getFoo(),getBar()等等。此外,您不需要局部变量。

function getAspectWidth(type) {
  if (type) {
   return 192;
  } else {
   return 100;
  }
}  

除此之外,我不会做任何其他事情。它比您的版本更易读和易懂。

或者您可以使用ternary operator

function getAspectWidth(type) {
  return type ? 192 : 100;
}  

更简洁。