gpt4 book ai didi

javascript - 使用 ES6 类语法在 Controller 中分配依赖项

转载 作者:行者123 更新时间:2023-12-04 02:09:51 25 4
gpt4 key购买 nike

在 ng-conf 2015 ( Angular 1.3 meets Angular 2.0 ) 的视频中,使用 ES6 类作为 Controller 的语法如下所示:

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

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

我看到注入(inject)的依赖项被指定为实例属性,我想知道这是否是一个好方法。由于 Controller 的依赖项通常是单例服务,它们不应该由实例共享吗?

他们这样做的原因是以前在 $scope 上的方法(因此在构造函数的主体中)现在在对象的共享原型(prototype)上。 John Papa's style guide实际上将它们直接分配给 this(尽管他没有使用 ES6 类 - 但这并不重要,因为它们只是构造函数 prototype 东西的语法糖)。这是个好主意吗?

另一种方法是将方法保留在原型(prototype)上,但将依赖项分配给局部变量(假设每个 Controller 都在其自己的模块文件中)。像这样的东西:

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

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

此处描述了第三种方法(使用 WeakMaps):Writing AngularJS Apps Using ES6 .我是否应该忘记我上面所说的一切并这样做?

最佳答案

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

Reason behind choosing WeakMap is, the entries of WeakMap that have objects as keys are removed once the object is garbage collected.

但是服务不是长期存在的吗?那么,为什么需要确保垃圾收集?

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

无论如何,我认为实例变量方法似乎是最有前途的方法。

关于javascript - 使用 ES6 类语法在 Controller 中分配依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29262581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com