使用 ES6 类语法在控制器中分配依赖项

2023-12-27

在 ng-conf 2015 的视频中(Angular 1.3 遇见 Angular 2.0 https://youtu.be/pai1ZdFI2dg?t=4m41s),使用 ES6 类作为控制器的语法如下:

class UnicornHype {
  constructor(unicornHorn, $q) {
    this.$q = $q;
    this.horn = unicornHorn
  }

  findUnicorn {
    return this.$q((resolve, reject) => {
      ...
      this.horn.thrust();
      ...
    });
  }
}

我看到注入的依赖项被分配为实例属性,我想知道这是否是一个好方法。由于控制器的依赖项通常是单例服务,因此它们不应该由实例共享吗?

他们这样做的原因是之前的方法$scope(因此在构造函数的主体中)现在位于对象的共享原型上。约翰·帕帕的风格指南 https://github.com/johnpapa/angular-styleguide#style-y031实际上将它们直接分配给this(虽然他没有使用 ES6 类 - 但这并不重要,因为它们只是构造函数上的语法糖prototype东西)。这是一个好主意吗?

另一种方法是将方法保留在原型上,但将依赖项分配给局部变量(假设每个控制器位于其自己的模块文件中)。就像是:

var q, horn;
class UnicornHype {
  constructor(unicornHorn, $q) {
    [q, horn] = [$q, unicornHorn];
  }
  findUnicorn {
    return q(...);
  }
}

这是否更好?如果是的话,会const实际上比var这里?这种方法有什么缺点吗?

第三种方法(使用WeakMaps) 描述如下:使用 ES6 编写 AngularJS 应用程序 http://www.sitepoint.com/writing-angularjs-apps-using-es6/。我应该忘记上面所说的一切并这样做吗?


我真的不明白他们为什么使用 Wea​​kmaps。 我引用:

选择 WeakMap 的原因是,一旦对象被垃圾回收,以对象为键的 WeakMap 条目就会被删除。

但服务不是长久之计吗?那么为什么需要确保垃圾收集呢?

在 javascript 中,所有非基元都是指向原始实例的指针,因此依赖项始终是共享的。那么为什么实例变量方法不是一个好主意呢?

不管怎样,我认为实例变量方法似乎是最面向未来的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ES6 类语法在控制器中分配依赖项 的相关文章

随机推荐