2013-07-13 5 views
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 

메인

에 참고

d 개의?

@foo = Data.foo 

귀하의 Data@data하지만 @foo과 동일 Data.foo 단지 값입니다 : 당신이 여기에 Data.foo 값을 꺼내 때

답변

3

@data 참조에 의해 전달되는하지만 당신은 그 참조 방법을 던지고있다 .

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

을 다음 @mutator.data.foo 보면 : 당신은 Data보다는 Data.foo에 유지해야 할 것입니다. 당신은 을 사용하여 foo에 게터를 정의 할 수 있으므로 data 부분을 숨기고 @mutator.foo을 작동하게 만들 수 있습니다. 이것이 작동하는 방법에 대한 몇 가지주의 사항은 this answer을보십시오.

+0

'foo'가 객체'{}'였고'@mutator = new Mutator (@ data.foo)'와 같이 전달한 후'@foo = foo'처럼 설정 했습니까? – Loourr

+1

사람들이 '@data.foo = {x : 6} '대신'@data.foo.x = 6'을 사용하여 참조가 바뀌지 않는 한 말입니다. –