Angular JS中的原型等

时间:2014-01-02 15:28:07

标签: javascript angularjs prototype

你是否应该在Angular JS中使用类,原型等?在学习Javascript(糟糕的主意)之前,我学习了Angular JS。现在我开始在javascript中阅读一些关于OOP的内容。我现在很困惑。

我有一个例子。这是一项服务。它有来自服务器的一些数据和来自用户的一些输入。它运行som逻辑并填充对象,然后为用户查看该对象。

选项1。只是一个对象。我删除了大部分代码,所以它更像是一个伪代码。这是您在大多数示例和教程中看到的方式。

  angular.module('calculationServices', ['ngResource']).
  factory('CalculationFactory', function(UnitsFactory){

    var calculations =  {
      mainCalculation: function(sizes, pipe, temperature){
        if(sizes === null || temperature === null){
          return;
        }
        var rawness = pipe.rawness;
        var mediaDensity = temperature.density;
        var results = [],
          nrOfSizes = sizes.length;
        for(var i = 0;i<nrOfSizes;i++){
          var flow = this.input.flow.valueInSIunit;
          var velocitySiUnit = this.velocityFN(sizes[i].innerdiameter/1000,flow);
          var pressureDropInSiUnit = this.pressureDropFN(velocitySiUnit,mediaDensity, frictionFactor, sizes[i].innerdiameter/1000);
          results.push({
            size:sizes[i].nominalsize
            innerDiameter:sizes[i].innerdiameter,
            velocity:{
              siUnit:velocitySiUnit,
              userUnit:velocityUserUnit
            }
          });
        }
        return results;
      },
      powerFN: function(flow, cp, density, deltaT){
        var power = flow * cp * deltaT * density;
        return power;
      },
      velocityFN: function(innerDiameter, flow){
        var area = Math.PI * Math.pow((innerDiameter) * 0.5 ,2);
        return flow / area;
      },
      input: { //Input is hooked up to my $scope
        flow:{
          valueInSIunit: 0.00075,
          value:0.75,
          unit: 'l/s'
        }
      },
    };
    return calculations;

  })
})

选项2 或。我应该使用类,实例化,原型等。像这样:

  factory('CalculationFactory', function(UnitsFactory){

    function PipeCalculations(params){
      this.flow = params.flow;
      this.pipe = params.pipe;
      this.sizes = params.sizes;
    }

    PipeCalculations.prototype.velocityFN = function(flow, innerDiameter){
      var area = Math.PI * Math.pow((innerDiameter) * 0.5 ,2);
      return flow / area;
    }

    PipeCalculations.prototype.createPipeCalculationObjects = function(sizes){
      var results = [];
      var nrOfSizes = sizes.length;
      var velocitySiUnit = this.velocityFN(sizes[i].innerdiameter/1000,flow);
      for(var i = 0;i<nrOfSizes;i++){
        results.push({
          size:sizes[i].nominalsize,
          velocity:{
            siUnit:velocitySiUnit
          }
        });
      }
      return results;
    };

    var pipeCalculations = new PipeCalculations({
      flow: { //Should this be hooked up directly to my scope?
        valueInSiUnit: 55,
        valueInUserUnit: 0.75
      },
      pipe: 0, //Data feed from controller
      sizes: 0
    });

    pipeCalculations.velocity = pipeCalculations.velocityFN(pipeCalculations.flow.valueInSiUnit, 25);
    pipeCalculations.output = pipeCalculations.createPipeCalculationObjects(pipeCalculations.sizes);

    return pipeCalculations;
})

这里有明确的对与错吗?我先做了一个选项。这非常简单,一切顺利。但它并没有感觉到“OOP”。但是,选项2对我来说要困难得多,因为很难找到合适的例子。此外,使用选项一,我可以简单地将我的示波器附加到我的模型,一切都会自动更新。但是我如何使用选项2正确地做到这一点?我应该从我的控制器实例化吗?

0 个答案:

没有答案
相关问题