为什么 setter 可以提高 JS/Angular 数组的性能

Why do setters improve performance in JS/Angular array

我正在处理 Angular 的一些性能问题,我在代码中注意到

// TODO(perf): generate setters to shave off ~40ms or 1-1.5%

如何为这样的东西创建一个 Javascript getter setter...

$scope.$first = (index === 0);

提高性能,什么是 "setter"?是这样的吗?

scope.$first = function(){
  index === 0;
};

javascript中的一个setter如下:

var dogs = {'medor': ..., 'fido': ...}
var my = {};
Object.defineProperty(my, "dogname", {
  set: function (name) { this.dog = dogs[name]; }
});

现在如果你写

my.dogname = 'fido'

将调用 setter,您将在 my.dog

中设置狗

由于是ES自带的特性,比起依赖listener/watcher/closure的任何一个王者,速度更快,层次更低。

例如,如果设置 $scope.first 应该有副作用,例如更新 $scope.last,setter 方法更快:

Object.defineProperty($scope, "$first", {
  set: function (index) { this.$last = this.$first + length } // for instance
});