对象未通过引用传递(CoffeeScript)

时间:2013-07-13 04:59:58

标签: javascript class reference coffeescript

我有两个类,一个用于保存和管理数据,另一个用于根据数据进行决策

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

可能导致这种情况的原因是什么?

1 个答案:

答案 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。您可以使用definePropertyfoo定义一个getter,从而隐藏data部分并使@mutator.foo正常工作。请查看this answer,了解有关其如何运作的一些说明。