2016-06-13 37 views
0

我有一個配置類:導入和使用類沒有它表現爲一個當前對象的類

export class Config { 
    color = 'blue' 
    type = 'ball'; 
} 

,我想用這個配置在另一個類,如下所示:

export class Game { 

    private config; 
    color; 

    constructor(config: Config) { 
     this.config = config; 
     this.color = this.config.color; 

    } 
} 

現在,當我創建new Game(config)的實例時,配置對象出現在Game類中,如Game.config.blue

有什麼辦法隱藏該屬性,但仍然使用配置變量?

+0

當你說「出現在遊戲類」哪兒是你看到這個?我只是將你有的東西複製到TS遊樂場中,創建一個'Game'的實例不能訪問配置屬性。 – Brocco

+0

如果它是私人的,你將無法訪問。正如Brocco所說,它不可能發生。無論如何,你的代碼對我來說很糟糕。我沒有看到你應該這樣做的情況'this.color = this.config.color;'而不是在沒有變量的情況下訪問對象本身 – iberbeu

回答

0

有什麼辦法來隱藏屬性,但仍使用上this的配置變量

所有屬性會在運行時可用。但是,使用private將阻止您使用TypeScript中的

0

使用private應該就足夠了,因爲TypeScript不會讓您從課程外部訪問它們。但是,如果你真的需要強制執行JavaScript的風格隱私,你可以這樣做:

class Game { 
    public color; 
    public getConfig; 

    constructor(config: Config) { 
     var config = config; // <--Private 
     this.color = config.color; 

     // If you need an accessor... 
     this.getConfig = function() { 
      return config; 
     }; 
    } 
} 

var baseball = new Game({color: 'blue', type: 'ball'}); 
console.log(baseball.config); // undefined 
console.log(baseball.getConfig()); // {color: 'blue', type: 'ball'} 
相關問題