2016-02-25 38 views
5
class Animal { 
    private name:string; 
    public Firstname:string; 
    constructor(theName: string) 
    { 
     this.name = theName; 
     this.Firstname=theName; 
    } 
} 

class Tiger { 
    function sample(){ 
     Animal animalName=new Animal('Tiger'); 
     document.body.innerHTML = animalName.name; 
    } 
    sample(); 
} 

您好新來的這個typeScript這裏動物類我創建了一個私有變量名我用在類constructor.Now在類中我創建了實例動物類,並能夠訪問該私有變量。我們可以訪問另一個類中的私人變量打字稿

我的問題是在java中,如果我們這樣做,我們會得到error.But在typeScript(因爲typescript支持oops),我們沒有得到任何錯誤,而且它給出的價值怎麼可能?

回答

11

首先 - 你的代碼不會編譯。 Typescript將檢查名稱的可訪問性併爲您提供錯誤。檢查自己的打字稿遊樂場:playground

二 - 這是可能獲得私有財產,如果你將刪除打字稿檢查,例如:

console.log((<any>animalName).name) 

這個工程由於是本地JavaScript並沒有一個概念的事實的私人物業(private properties)。隨着打字稿被編譯爲JavaScript,你有這種可能性。

+0

+1好答案。我想提一下,依賴'private'在運行時不是私有的事實會使代碼遷移在某個時候更困難+極大地降低可維護性。 OP應該重新考慮他們的設計。 – basarat