我有两个类,一个用于保存和管理数据,另一个用于根据数据进行决策
module.exports = class Data
constructor: () ->
@stuff =
foo: 42
bar: 'something'
并在另一个文件中
module.exports = class Mutator
constructor: (Data) ->
@foo = Data.foo
并在主文件中
Data = require './Data'
Mutator = require './Mutator'
module.exports = class Main
constructor: () ->
@data = new Data()
@mutator = new Mutator(@data)
我遇到的问题是@data
似乎没有通过引用传递
主要
console.log @Mutator.foo # 42
@data.foo = '24'
console.log @Mutator.foo # still 42
可能导致这种情况的原因是什么?
答案 0 :(得分:3)
@data
正在通过引用传递,但是当您在此处提取Data.foo
值时,您将抛出该引用方式:
@foo = Data.foo
您的Data
与@data
相同,但@foo
只是Data.foo
的值。您需要保留Data
而不是Data.foo
:
class Mutator
constructor: (Data) ->
@data = Data
然后查看@mutator.data.foo
。您可以使用defineProperty
为foo
定义一个getter,从而隐藏data
部分并使@mutator.foo
正常工作。请查看this answer,了解有关其如何运作的一些说明。