0

我有两个类,一个保存和管理数据,一个根据数据做出决策

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

这可能是什么原因造成的?

4

1 回答 1

3

@data正在通过引用传递,但是当您在Data.foo此处提取值时,您正在抛出该引用方式:

@foo = Data.foo

YourData与 your 相同,@data@foo只是 的值Data.foo。你需要坚持Data而不是Data.foo

class Mutator
    constructor: (Data) ->
         @data = Data

然后看看@mutator.data.foo。您可能可以使用defineProperty定义一个吸气剂foo,从而隐藏data零件并使其@mutator.foo工作。查看此答案以获取有关其工作原理的一些说明。

于 2013-07-13T05:33:51.033 回答