是否有一种优美的方式来“模拟”通过引用传递的吸气剂?

时间:2019-07-25 21:16:40

标签: javascript class pass-by-reference getter

我有以下课程...

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>

1 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以将引用传递给计算所得的值,而无需执行该引用即可获取

不。传递函数或传递带有getter属性的对象是您唯一的选择。两者都是完全合理的,尽管该函数使结果很明显可能会发生变化-一个“单独”更改的对象可能会造成混淆。