我有以下课程...
class Order {
constructor() {
// ...
}
get subtotal() { return this.items.reduce((sum, {price}) => sum+price, 0); }
}
...以及一个名为PaymentSummary
的组件,我想在其中引用Order.subtotal
。但是,与吸气剂一样,我只能按值传递subtotal
。
伪/简化:
let order = new Order(); //subtotal: 15.00
let paymentSummary = new PaymentSummary(order.subtotal);
order.items.push( {price: 100.00} ); //subtotal: 115.00
console.log( paymentSummary.subtotal ); //15.00
显而易见的解决方案是使subtotal
成为方法而不是 getter ,例如:
class Order {
constructor() {
// ...
}
function subtotal() { return this.items.reduce((sum, {price}) => sum+price, 0); }
}
现在我可以将Order.subtotal
用作函数引用了,我们就可以设置了。
但是,这是 only 解决方案吗?
也许我过于谨慎或只是以错误的方式进行操作,但是似乎有点奇怪,订单数据现在是属性和方法的混合包。
我曾考虑传递整个order
,但考虑到它的大小/复杂度(多个嵌套类,带有自己的嵌套类,等等),这似乎是个坏主意。
鉴于SO需要特定的问题,我想我的问题可以归结为:是否有一种方法可以传递对计算值的引用,这样检索它就不需要执行吗? / p>
答案 0 :(得分:1)
有没有一种方法可以将引用传递给计算所得的值,而无需执行该引用即可获取
不。传递函数或传递带有getter属性的对象是您唯一的选择。两者都是完全合理的,尽管该函数使结果很明显可能会发生变化-一个“单独”更改的对象可能会造成混淆。