Javascript Angularjs中定义属性的优化

Javascript Angularjs中定义属性的优化,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,在使用DefineProperty时,我试图优化我的代码。下面是一个链接,指向我需要在应用程序中执行的JSFIDLE示例 基本上,当用户在输入文本框中输入一些数字时,我需要实时计算输出。用户有多组文本框,因此每个组都可以有自己的实时输出,因此我在计算服务中使用了forEach。此功能需要保持原样 在本例中,我需要测试复制对象数组时发生的情况,因为用户可以进行一些更改,然后取消他/她的更改。通过使用角度。复制它会把事情搞砸。因此,我发现使用slice作为浅拷贝更好。有人知道原因吗 我的第二个也是

在使用DefineProperty时,我试图优化我的代码。下面是一个链接,指向我需要在应用程序中执行的JSFIDLE示例

基本上,当用户在输入文本框中输入一些数字时,我需要实时计算输出。用户有多组文本框,因此每个组都可以有自己的实时输出,因此我在计算服务中使用了forEach。此功能需要保持原样

在本例中,我需要测试复制对象数组时发生的情况,因为用户可以进行一些更改,然后取消他/她的更改。通过使用角度。复制它会把事情搞砸。因此,我发现使用slice作为浅拷贝更好。有人知道原因吗

我的第二个也是真正的问题是,正如您所看到的,我在一个“Get”函数中有一个“Called”日志输出。在我的示例中,每次更改其中一个文本框中的值时,Get都会被调用4次。我如何优化它,使Get被称为less?有可能吗

对于此代码的任何优化示例都将不胜感激

var app = angular.module("TestApp", []);

console.log(app);

app.service("MyCalc", function() {
  this.addCalcs = function(totals) {
    var newTotals = [];

    angular.forEach(totals, function(t, index) {
      newTotals[index] = {};
      Object.defineProperty(newTotals[index], 'Sum', {
        get: function() {
          console.log("Called!")
          var a = parseInt(t.a);
          var b = parseInt(t.b);
          return a + b;
        }
      });
      Object.defineProperty(newTotals[index], 'Sub', {
        get: function() {
          var a = parseInt(t.a);
          var b = parseInt(t.b);
          return a - b;
        }
      });
    });
    return newTotals;
  }
});

app.controller("MyCtrl", function($scope, MyCalc) {
  $scope.myObject = [];
  $scope.savedObject = [];

  var nums1 = {};
  nums1.a = 3;
  nums1.b = 2;
  $scope.myObject[0] = nums1;

  var nums2 = {};
  nums2.a = 5;
  nums2.b = 4
  $scope.myObject[1] = nums2;

  $scope.Calcs = MyCalc.addCalcs($scope.myObject);


  // Copy the original Object - Copy Messes things up so use slice instead 
  // to get shallow coppy
  //angular.copy($scope.savedObject, $scope.myObject);
  $scope.savedObject = $scope.myObject.slice();

  var nums3 = {};
  nums3.a = 10;
  nums3.b = 5;
  $scope.savedObject[0] = nums3;

  $scope.SavedCalcs = MyCalc.addCalcs($scope.savedObject);

});